STC8G1K17A驱动舵机云台

1需求

设计一个舵机云台,实现通过摇杆实现舵机的二维控制。

2实现方案

2.1设计原理

通过stc8g1k17a的5.5和3.2端口进行摇杆的模拟量采集。

通过3.3和5.4实现PWM波形输出,实现舵机控制。

2.2电路设计

2.3PCB设计

2.4软件设计

8位PWM设计,实测结果动作精度太小,没法精准控制,资料如下:

https://download.youkuaiyun.com/download/weixin_51248645/90488008

3实物调试

实测结果中,问题如下:

1.控制精度太差,舵机运动过程中明显卡顿不流畅。

2.摇杆采集ADC数据不稳定,由于摇杆线超过1M,导致采集数据不稳定。

4系统优化

4.1控制精度优化

采用10位PWM进行设计。

4.1.1 PCA时钟为定时器0的溢出脉冲

//Tpostive:占空比,1~99
void PWM_Set_init(void)
{   
    CCON = 0x00;
    CMOD = 0x04;                                //PCA时钟为定时器0的溢出脉冲
    CL = 0x00;
    CH = 0x00;
}

4.1.2定时器分频系数计算

//k: 分频比
void PwmTimer0Init(uint16_t k)
{
  TR0 = 0;
    AUXR |= 0x00;        //定时器时钟12T模式
    TMOD &= 0xF0;        //设置定时器0模式1,16位定时器
    TMOD |= 0x00;        //设置定时器0模式1,16位定时器
    TL0=(65536-k)%256;  //设置定时初值 5ms
    TH0=(65536-k)/256;
    //TF0 = 0;            //清除TF0标志
    ET0  = 0;       //定时器0中断
  TR0 = 1;
}

4.1.3计算定时器

    PwmTimer0Init(18);     //(65536-100)%256; //78=20ms/256  一个脉冲得时间t = 1*12/11.0592M = 1.085us
    ET0 = 1; //使能定时器中断
    EA = 1;
    

单片机一个脉冲得时间t = 1*12/11.0592M = 1.085us

20ms分为1024份,则每个控制精度代表19.5us时间,对应的脉冲数为 /1.085=18

所以PwmTimer0Init传参为18,刚好20ms。

舵机控制0-180°,要在0.5ms-2.5ms驱动舵机,对应1024分频,则有效范围为26-128.则单片机只需要调节占空比在26-128范围就行。

4.1.4舵机控制

//Tpostive:占空比,1~99
void PWM1_Set(int Tpostive)   //取26-128   50-75
{
  int d;

	CCAPM1 = 0x42;                              //PCA模块1为PWM工作模式 P33
  //PCA_PWM1 = 0xc0;                            //PCA模块1输出8位PWM
	d=1024-Tpostive;
	PCA_PWM1 = 0xf4;
	/*
	EPC1H =1; EPC1L =1;
	XCCAP1H = 0x3;XCCAP1L = 0x3;
*/
  CCAP1L = (char)(d);                                 //PWM占空比为87.5%[(100H-20H)/100H]
  CCAP1H = (char)(d);

  CR = 1;                                     //启动PCA计时器
}

 这里需要注意以下几个事项:

1.10位PWM,要设置CCAPM1 = 0x42;

2.在更新 10 PWM 的重载值时,必须先写高两位 XCCAPnH[1:0],再写低 8 CCAPnH[7:0]

3.    EPC1H =0; EPC1L =0; XCCAP1H = 0x3;XCCAP1L = 0x3;这几个寄存器的值,都在PCA_PWM1中写即可,没有单独定义地址。

4.EPC1H =0; EPC1L =0;这个地址要写0,不能写1,这个是第11的值,现在用的是10位PWM,否则输出一直为低电平。

4.2摇杆采集数据消抖

方案1:调整ADC采集处理的范围,改为采集值> 或者 < 初始值 30,才认为摇杆推动了。

方案2:采集两次ADC的数据做方差,方差小于某个值才认为采集数据准确,没有突变。

资料如下:

https://download.youkuaiyun.com/download/weixin_51248645/90488156

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪法师解剖鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值