|
超声波可以看前面发的迪文屏二次开发之超声波传感器帖子
舵机模块讲解:
硬件电路连接:Trig连接P2^1 Echo连接P2^0 VCC连接5V pwm黄线连接P1^7
接线:
红色----VCC
棕色----GND
橙色----信号线(连接到单片机输出PWM的引脚)
对180°的舵机来说,舵机的控制一般需要一个20ms的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分,对应控制180°舵机的0-180°,呈线性变化。
以180度角度伺服为例,那么对应的控制关系是这样的(t为高电平时间):
t=0.5ms(占空比2.5%)---------0°;
t=1.0ms(占空比5%)-----------45°;
t=1.5ms(占空比7.5%)---------90°;
t=2.0ms(占空比10%)---------135°;
t=2.5ms(占空比12.5%)-------180°;
UI设计(附在源码文件夹中):
导入背景图,生成32.icl文件,48.icl图标文件,控件添加数据变量。
添加图标旋转指示组件,变量地址设定为1004,设置旋转中心,角度值等参数
设置转动调节组件,地址也同样设定1004使数据同步,设置圆的参数
添加数据变量组件显示转动的角度值,地址同样设定为1004,整数类型要改变为3位
部分代码讲解:
- 主函数
- void main(void)
- {
- sys_init();//系统初始化
- time0Init();//超声波定时器0初始化
- Timer1Init();//舵机定时器1初始化
- while(1)
- {
- Get_Val();
- if(val) //如果数据有效
- {
- sys_write_vp(START_WIN_TEMP_VP,(u8*)&val,1);//将数据显示在控件
- }
- sys_read_vp(START_WIN_TEMP0_VP,(u8*)&val0,1); //读取仪表盘的值
- Use_Duoji(val0); //根据数值控制舵机
- sys_delay_about_ms(300);
- }
- }
- duoji.c
- #include "duoji.h"
- u8 time1C=0;
- u16 time1CC=0;
- u8 duojiflag0=0;
- u8 duojiflag=1;
- void Timer1Init(void) //500微秒@11.0592MHz
- {
- PORTDRV = 0x01;//驱动电流为8mA
- P1MDOUT |= 0x80; //设置为推挽输出
- TMOD |= 0x10; //设置定时器模式
- TL1 = 0x67; //设置定时初值
- TH1 = 0xDE; //设置定时初值
- TF1 = 0; //清除TF1标志
- TR1 = 1; //定时器1开始计时
- ET1=1; //开启定时器1中断
- EA=1; //开启总中断
- }
- void duojitiao(u8 angle)//判断角度,将数据给影子变量
- {
- if(angle==0)
- {
- duojiflag0=1;
- }
- if(angle==45)
- {
- duojiflag0=2;
- }
- if(angle==90)
- {
- duojiflag0=3;
- }
- if(angle==135)
- {
- duojiflag0=4;
- }
- if(angle==180)
- {
- duojiflag0=5;
- }
- }
- void Use_Duoji(u16 val0)
- {
- if(val0<20) duojitiao(0); //判断数值
- else if(val0<45) duojitiao(45);
- else if(val0<90) duojitiao(90);
- else if(val0<135) duojitiao(135);
- else if(val0<180) duojitiao(180);
- }
- void timer1() interrupt 3//定时器1的中断
- {
- TL1 = 0x67; //设置定时初值
- TH1 = 0xDE; //设置定时初值
- if(time1C<duojiflag)//产生周期为20ms的pwm波
- {
- DJ=1;
- }
- else DJ=0;
- time1C++; //time1C++为500us
-
- //time1C为40等于20ms,清零,重新产生pwm
- if(time1C>=40)
- {
- time1C=0;
- duojiflag=duojiflag0; //等待周期结束后,将影子变量的值给pwm的CCR
- }
- }
- //代码中使用的时大于45度才会转动只提供演示效果,可以根据自己需求改变实际触发的角度值,比如8°为转动的一个幅度等,只要满足20ms中0.5ms-2.5ms,0-180度的线性对应即可
复制代码
效果演示:
转动舵机前:
旋转改变舵机转动角度:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|