标题:
stm32多路PWM模拟输出的程序源码
[打印本页]
作者:
Happenzj
时间:
2018-5-25 10:16
标题:
stm32多路PWM模拟输出的程序源码
stm32F103c8t6的程序(可方便改成使用的单片机),通过定时器模拟输出多路脉冲宽度不同的PWM,且脉冲宽度与脉冲宽度改变速度可控。自己用于多路舵机驱动,理论上单片机有多少I/O口就能输出多少路PWM!!!
stm32单片机源程序如下:
#include "stm32f10x.h"
#include "TIM.h"
#include "DELAY.h"
#include "GPIO.h"
#include "math.h"
#include "DATA.h"
int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//选择中断分组4
GPIO_Configuration();
TIM3_Init(71,9);//每10us进一次中断
NVIC3_Configurature();
TIM2_Init(35999,19);//100Hz
NVIC2_Configurature();
slaver_SetAngle(0,220,60);//零号舵机,A1
slaver_SetAngle(1,20,60);//A2
slaver_SetAngle(2,40,60);//A3
slaver_SetAngle(3,60,60);
slaver_SetAngle(4,80,60);
slaver_SetAngle(5,100,60);
slaver_SetAngle(6,120,60);
slaver_SetAngle(8,140,60);
slaver_SetAngle(9,160,60);
slaver_SetAngle(10,170,60);
slaver_SetAngle(11,100,60);
slaver_SetAngle(12,40,60);
slaver_SetAngle(13,60,60);
slaver_SetAngle(14,70,60);
slaver_SetAngle(15,80,60);
slaver_SetAngle(16,90,60);
slaver_SetAngle(17,100,60);
while(1)
{
}
}
volatile unsigned short pulse_width = 2000;
volatile unsigned int tim3_cnt = 0;//设置的奇数位
void TIM3_IRQHandler(void)//TIM3做PWM输出
{
unsigned char j;
TIM3->SR = 0;//清楚中断
tim3_cnt++;
if(tim3_cnt == pulse_width)
{
tim3_cnt = 0;
GPIOA->ODR |= 0XFFFF;//对其他的端口不会影响
GPIOB->ODR |= 0XFFFF;
}
for(j = 0;j < slave_Number;j ++)
{
if(tim3_cnt == slaver_data[j].Data_Converted)//等于角度转换值得到的数值
{
(slaver_data[j].GPIOx)->ODR&=~slaver_data[j].GPIO_Pin;//选择端口,进行赋值
}
}
}
void TIM2_IRQHandler(void)//定时器2做控速
{
unsigned char i;
TIM2->SR = 0;
for(i=0; i<slave_Number; i++)
{
if(fabs(slaver_data[i].Data_Desire - slaver_data[i].Data_Real) < slaver_data[i].Data_Speed*CYCLE_TIM2_UPDATE)//判断实际角度与输入角度的差值
{
slaver_data[i].Data_Real = slaver_data[i].Data_Desire;//差值小就直接赋值
}
else
{
if(slaver_data[i].Data_Desire > slaver_data[i].Data_Real)//输入值大于实际值
{
slaver_data[i].Data_Real += slaver_data[i].Data_Speed*CYCLE_TIM2_UPDATE;//加等于输入值
}
else
{
slaver_data[i].Data_Real -= slaver_data[i].Data_Speed*CYCLE_TIM2_UPDATE;//减等于输入值
}
}
slaver_data[i].Data_Converted = (unsigned short)(50.0f + slaver_data[i].Data_Real*SLAVER_CHANGE);//加上偏移量,转换数值
}
}
复制代码
所有资料51hei提供下载:
duoji-qudong-5.zip
(318.85 KB, 下载次数: 33)
2018-5-25 10:18 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
Happenzj
时间:
2018-5-25 10:17
我怎么上传资料啊,刚来这个论坛,尴尬,,,
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1