控制电路突然由手动变成自动的原因?

控制电路突然由手动变成自动的原因?,第1张

我这个设计相当于一个原有手动控制更改为自动控制。整提设计思路如下,但现阶段仍有问题,需要各路大神帮提供思路进行解决,谢谢~

原有手动控制原理:

1、原有手动控制是同轴反向旋转电位器RES1,输入到原有设备控制器U1内,控制器接收到信号给驱动器U2控制电机运行;

2、供电电压为5V;

3、默认状态下,两个电位器输出为中间值2.5V;

4、当电位器旋转时,两个电位器输出为以2.5V为中心值的差模信号。既以2.5V为中心值,一段输出为2.5V+Vo,另一端输出为2.5V-Vo(Vo为-1.3V~1.3V之间变化的值);

5、当电位器旋转控制设备启动时,供电电压5V会有波动。

6、设备停止时,示波器检测约有1V的噪声干扰。

自动控制初期设计:

1、自动控制代替原有电位器,完成模拟手动工作状态;

2、控制芯片单片机:STM32F103ZET6.

3、采用外部DA芯片:AD5672芯片,2倍增益,0~5V输出,两路DA输出端模拟同轴电位器;

4、电压跟随器:TLC2274ACD,两路DA输出后分别接电压跟随器,然后进入设备控制器。

5、程序内设立中间值2.5V,根据相应工序,1路DA输出2.5V+Vo,另一端输出2.5V-Vo;

6、出现问题,当设备启停时,原有控制器U1报警;

7、测试发现设备启停时,5V电压会拉低,人工电位器时必然会导致输出差值信号相应变小。

更改设计:

1、原有设计不变;

2、增加DA采集芯片:AD7991

3、增加基准电压:ADR293,作为AD7991基准电压。5V供电电压经过一级电压跟随器后,进入ADR293;

4、ADR293采集5V供电电压变化,然后在程序中根据5V供电电压变化,相应的两路DA电压进行等比例变化。

5、测试结果仍然报警,而且在电压跟随的情况下,出现设备运行不稳定(忽快忽慢)

最新测试:

出现一个问题:比如现在供电电压5V,电位器输出端在中值2.5V。如果这时供电电压变为4.8V,实际测试电位器输出端为2.7V(实际应该减小,可能跟原有控制器U1内部电路有关系)。不知道这种是不是导致报警原因,但是不清楚实际关系到底是什么样。

可以发送16进制数或ASCII码格式的数据

发送16进制的数据,例如:

SBUF=ADC1//ADC1是AD转换的结果,16进制数据

发送ASC码的格式数据,例如:

SBUF=0X30+ADC1/100//发送百位数字

SBUF=0X30+(ADC1%100)/10//发送十位数字

SBUF=0X30+(ADC1%100)%10//发送个位数字

AD0809的采集程序

//---A/D转换---

//-----头文件引用------

#include <Reg51.h>

#include <absacc.h>

#include <intrins.h>

typedef unsigned char BYTE/*自定义字节类型*/

#define Set_Bit(BIT) (BIT = 1) /*定义置1函数*/

#define Clear_Bit(BIT) (BIT = 0) /*定义清0函数*/

/************************************************************************************/

void Write_Hd7279(BYTE,BYTE)/*定义HD7279写函数*/

BYTE Read_Hd7279(BYTE)/*定义HD7279读函数*/

void Send_Byte(BYTE)/*定义HD7279发送字节函数*/

BYTE Receive_Byte(void)/*定义HD7279接收字节函数*/

void Short_Delay(void)/*定义短延时函数*/

void Long_Delay(void)/*定义长延时函数*/

void Mcu_Init(void)/*定义MCU初始化函数*/

void Delay_200_mS(void)/*定义200ms延时函数*/

sbit Hd7279_Clk=P1^6/*定义HD7279时钟硬件连接*/

sbit Hd7279_Data=P1^5/*定义HD7279数据硬件连接*/

sbit cs=P1^7

void Short_Delay(void) /*短延时函数*/

{

BYTE i

for(i=0i<0x08i++)

}

/************************************************************************************/

void Long_Delay(void) /*长延时函数*/

{

BYTE i

for(i=0i<0x30i++)

}

/************************************************************************************/

void Write_Hd7279(BYTE Command,BYTE Data) /*HD7279写函数*/

{

Send_Byte(Command)

Send_Byte(Data)

}

/************************************************************************************/

void Send_Byte(BYTE Data_Out) /*HD7279发送字节函数*/

{

BYTE i

cs=0

Long_Delay()

for(i=0i<8i++)

{

if(Data_Out&0x80) Set_Bit(Hd7279_Data)

else Clear_Bit(Hd7279_Data)

Set_Bit(Hd7279_Clk)

Short_Delay()

Clear_Bit(Hd7279_Clk)

Short_Delay()

Data_Out=Data_Out<<1

}

Clear_Bit(Hd7279_Data)

}

//-----宏声明-----

#define A_DPORT XBYTE[0xFef3]//0809通道0地址

#define uchar unsigned char

//-----变量定义-----

bit bdata bz=0//定义标志

uchar val

//-----初始化-----

void first(void)

{

P1=0xff

P2=0xff

P3=0xff

P0=0xff

Send_Byte(0xa4)

IT1=1

EX1=1

EA=1//INT0 允许

}

//-----中断-----

void int_0(void) interrupt 2

{

val=A_DPORT//读 A_D 数据

bz=1//置读数标志

}

//-----主程序-----

main()

{

first()//初始化

while(1)

{

A_DPORT=val//启动 A_D

while(bz==0)//等待 A_D 转换结束

// val=~A_DPORT

//P1=val//数据输出

Write_Hd7279(0xc8,val&0x0f)

Write_Hd7279(0xc9,val>>4)

Write_Hd7279(0x92,0x00)

Write_Hd7279(0x93,0x00)

Write_Hd7279(0x94,0x00)

Write_Hd7279(0x95,0x00)

Write_Hd7279(0xce,0x0d)

Write_Hd7279(0xcf,0x0a)

bz=0//清读数标志

}

}

这就是C的程序

http://hi.baidu.com/dzkfw/blog/item/4a188216fd986b12c83d6d05.html

不平凡的单片机学习资料,很好的单片机教程,超好用,一个不占内存的教程,有案例。

1、最新版单片机编程宝典下载地址,学习单片机编程必备手册

2、单片机c语言运用例子

3、十天学会单片机c语言和单片机制作,最好的单片机资料


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12098083.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存