本帖最后由 zlook119 于 2024-2-21 18:01 编辑
本帖最后由 zlook119 于 2024-2-21 17:55 编辑
最近正在调试SG90舵机,PWM那块整不太明白,寻思几个IO口先让舵机转一下
于是在GPIO19口直接接了舵机的信号线,并烧录了一下的程序main.c
#include "bflb_mtimer.h" //mtimer定时器头文件
#include "bflb_pwm_v2.h" //pwm_v2头文件
#include "bflb_clock.h" //系统时钟头文件
#include "board.h" //开发板头文件,包装的库
#include "bflb_gpio.h" //gpio头文件
struct bflb_device_s *pwm; //创建LHAL外设库结构体,名称为pwm
void my_pwm_gpio_init() //编写一个选择pwm输出的gpio口初始化函数
{
struct bflb_device_s *gpio;
gpio = bflb_device_get_by_name("gpio");
bflb_gpio_init(gpio, GPIO_PIN_19, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
//选择IO0作为pwm输出,
}
int main(void)
{
int i;
board_init(); //板子初始化
my_pwm_gpio_init(); //调用函数,里面设置好了pwm输出的gpio口
pwm = bflb_device_get_by_name("pwm_v2_0"); //给外设接口赋名pwm_v2_0
/* period = .XCLK / .clk_div / .period = 40MHz / 40 / 1000 = 1KHz */
struct bflb_pwm_v2_config_s cfg = {
.clk_source = BFLB_SYSTEM_XCLK,
.clk_div = 40,
.period = 255,
}; //设置PWM的频率,选择时钟,分频,和周期。根据上面的公式算出最终的频率。
/*初始化PWM输出*/
bflb_pwm_v2_init(pwm, &cfg);
bflb_pwm_v2_channel_positive_start(pwm, PWM_CH3); //那么问题来了,如何知道IO口对应的PWM通道,后面会解答,IO0是通道0
bflb_pwm_v2_start(pwm); //将设置好的频率开启pwm输出
while (1) {
printf("pwm basic running\r\n");
for(i=0;i<255 ;i++){
bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH3, 0, i);
bflb_mtimer_delay_ms(5);
}
for(i=255 ;i>0;i--){
bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH3, 0, i);
bflb_mtimer_delay_ms(5);}
}
}
刚烧录进去,舵机转了大概90°,然后串口在串口助手中消失,然后手触摸芯片AMS1117特别烫手,然后冷却一段时间后,再把M61插到串口,就再也没找到了。
下边是上电的视频,没有接任何外设,AMS1117上涂的焊锡膏明显化开了,高温
手头有万用表,请各位大佬帮忙排查一下,先谢谢啦 |