芯片破解STM32F407控制SG90舵机低速旋转源程序
芯片破解舵机的转速大概趋于平稳
芯片破解当然每步22.5°肯定是不平滑的,我们可以分更多块每步1°或者更小
芯片破解顺便写了一个函数,还有优化的空间
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "timer.h"
#include "key.h"
#include "oled.h"
unsigned int key=0,actual_pwm=100;
u32 part=0,time=0;
/**
*作用:舵机旋转
*expect_pwm:舵机目标旋转值
*s:舵机到达指定位置耗时
*最小转动角度:0.45*5
**/
void SG90(u32 expect_pwm,u32 s)
{
if(expect_pwm>actual_pwm)
time=1000000*s*5/(expect_pwm-actual_pwm);//微秒级拆分
if(expect_pwm<actual_pwm)
time=1000000*s*5/(actual_pwm-expect_pwm);//微秒级拆分
if(expect_pwm!=actual_pwm)
{
if(expect_pwm>actual_pwm)
{
while(1)
{
actual_pwm=actual_pwm+5;//一次
TIM_SetCompare1(TIM14,actual_pwm);
part++;
delay_us(time);
if(expect_pwm==actual_pwm)
{
part=0;
break;
}
}
}
if(expect_pwm<actual_pwm)
{
while(1)
{
actual_pwm=actual_pwm-5;
TIM_SetCompare1(TIM14,actual_pwm);
part++;
delay_us(time);
if(expect_pwm==actual_pwm)
{
part=0;
break;
}
}
}
}
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
TIM14_PWM_Init(4000-1,420-1); //84M/4200=200khz的计数频率,重装载值4000,所以PWM周期为0.02s(20ms)
KEY_Init();
while(1)
{
key=KEY_Scan(0);
if(key==1)
{
SG90(500,1);
}
if(key==2)
{
SG90(100,1);
}

芯片解密