标题:
IAP15W4K61S4单片机模拟量控制两路PWM
[打印本页]
作者:
LanSeXinQing
时间:
2018-5-10 13:57
标题:
IAP15W4K61S4单片机模拟量控制两路PWM
/*此系统如果不控制正反转引脚,那么一上电运转与程序无关,因为PWM引脚一上
电就为高电位*/
#include "IAP15W4K61S4.h"
#include "Adc_config.h"
#include "delay_m.h"
//#include "serial_xj.h"
#include "pwm_contr.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
uchar one_adc_value=0xff, two_adc_value=0xff; //两路ADC值
sbit FFW=P3^5; //方向控制位
uchar L_Speed=0, R_Speed=0, temp1=0, temp2=0; //左右两路速度
uint value1=0;
bit L_R_Flag=0;
void main()
{
//Serial1_Init(); //串口通信初使化
ADC_RES=0; //ADC转换寄存器
Adc_Init(); //ADC初使化
//Adc_Change(5); //启动P1.5进行AD转换
P1M0=0x03;
P1M1=0x00; //设置成强推挽输出
mDelay(10000); //延时一段时间待电源稳定。
pwm_Init(); //PWM初使化
IE=0xa0; //开总中断,允许ADC中断执行
while(1)
{
Adc_Change(5); //测量第五路ADC
mDelay(100);
Adc_Change(6); //测量第六路ADC
mDelay(100);
if(one_adc_value<118) //如果后退
{
L_R_Flag=1; //需要判断左右转向
temp1=118-one_adc_value;
temp1<<=1;
}
else if(one_adc_value>138) //前进
{
L_R_Flag=1; //需要判断左右转向
temp1=one_adc_value-138;
temp1<<=1;
}
else
{
FFW=1; //方向为前进
L_Speed=0xff;
R_Speed=0xff;
}
if(L_R_Flag) //如果有速度
{
L_R_Flag=0; //清除左右转标志位
if(two_adc_value<118)
{
temp2=118-two_adc_value;
value1=(((temp1*100)/118)*temp2)/100;
temp2=(unsigned char)value1;
R_Speed=0xff-temp1+temp2;
L_Speed=0xff-temp1;
}
else if(two_adc_value>138)
{
temp2=two_adc_value-138;
value1=(((temp1*100)/118)*temp2)/100;
temp2=(unsigned char)value1;
L_Speed=0xff-temp1+temp2;
R_Speed=0xff-temp1;
}
else
{
L_Speed=0xff-temp1;
R_Speed=0xff-temp1;
}
}
pwm_Change(L_Speed, R_Speed); //ADC值转频率
//Send_data(0x55);
}
}
/*ADC中断只起一个发送串行数据的功*/
/*中断函数不需要声明*/
void adc_inter() interrupt 5
{
static Count=0;
ADC_CONTR &=!ADC_FLAG;
if(Count==0)
{
Count=1;
one_adc_value=ADC_RES;
}
else
{
Count=0;
two_adc_value=ADC_RES;
}
}
复制代码
作者:
admin
时间:
2018-5-10 15:42
缺少头文件夹 楼主能分享下吗?
作者:
yutian_51hei
时间:
2018-5-10 16:30
/*此系统如果不控制正反转引脚,那么一上电运转与程序无关,因为PWM引脚一上电就为高电位*/
这个问题可以在单片机PWM脚上外接一个2.7K下拉电阻,就不会一上电输出高电平了。
作者:
LanSeXinQing
时间:
2018-5-10 20:59
yutian_51hei 发表于 2018-5-10 16:30
/*此系统如果不控制正反转引脚,那么一上电运转与程序无关,因为PWM引脚一上电就为高电位*/
这个问题可以 ...
是的,所以移植到AVR单片机了
作者:
zctwss321
时间:
2019-5-28 22:40
你的ms级延时函数在多少晶振条件下的?写清楚啊!!!!
作者:
Coco12138
时间:
2019-8-2 09:49
你好,看了你的文章,这边有Pid控制电机转速的问题想和你交流
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1