基于CUBEMAX hal库的sg90陀机的基本步态

1.数模转换与模数转换(粗略):

  对于常见的硬件adc来说:常见的模块有光敏模块,温湿度模块等等,其输出结果就是将所测变化的模拟量转化为高低电平的数字信号从而用电压来表示。(图片来自于up主keysking,很好的单片机教程up主)

  而对于常规的模拟信号,数字信号的抗干扰性更好,所以我们如何用数字信号去模拟模拟信号呢?哒哒,这就要讨论到周期信号的占空比了,对于一个周期的数字信号来说,我们可以通过修改有效电平和无效占比的占比比例,从而让输出的期望电平位模拟信号的相对值。

有效电平与无效电平为1:1时
当无效电平占比增加时候

  从上面两个图像可以看出来了,当修改占空比的时候图像会发生畸变,同时一个周期的期望电压也会改变,数字信号发生畸变的原因是因为无效电平的占空比例过大,而拉高电压时不同与拉低电压,是一个需要时间的过程,所以我们这时候就要CH Polarity选择高速模式。如图:

cubemax配置(f103c8t6为例):

sys:

rcc

时钟拉满就好

 TIM2

  这里Prescaler的数值选择71,Counter Period的数值选择19999,要求周期的时间就是20ms。四个通道的配置都一致。(移植的朋友记得自己计算下)

Tout=(ARR+1)⋅(PSC+1)​/TIMxCLK{20000X72➗72000000}

串口(这里用的是串口1)

命名并且生成。

sg90调试

  可以看到,当有效电平为0.5ms时候,陀机为0°,以此类推,所以我们可以通过计算修改占空比和延迟来控制陀机

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
#define angle1_0  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,500);
#define angle1_45  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,1000);
#define angle1_90  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,1500);
#define angle1_135  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,2000);
#define angle1_180  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,2500);
int main(void)
{
  while(1)
  {
       angle1_0;
        HAL_Delay(1000);
       angle1_45;
        HAL_Delay(1000);
       angle1_90;
        HAL_Delay(1000);
       angle1_135;    
        HAL_Delay(1000);
       angle1_180;
        HAL_Delay(1000);
  }
}

 步态

  这里由于硬件原因只会说最简单的步态,这个东西其实不难,我们从俯视的角度来看,为4个脚分别标号,以下资料取材【步态详解】人人都可制作的WiFi遥控迷你四足机器人_哔哩哔哩_bilibili,很简单,建议跟着一步步做,延迟方面建议延迟150ms左右。当然如果担心会延迟冲突,我们可以新开一个tim来写一个自己的延迟函数

延迟

delay.c

// Core\Src\delay.c
#include "tim.h"
#include "delay.h"
/**
 * @brief    微秒延时
 * @param    Delay_us  —— 指定延迟时间长度,单位为微秒。
 * @retval   None
 */
void delay_us(uint32_t Delay_us) 
{
		__HAL_TIM_SetCounter(&htim1, 0);
		__HAL_TIM_ENABLE(&htim1);
		while(__HAL_TIM_GetCounter(&htim1) < Delay_us);
		/* Disable the Peripheral */
		__HAL_TIM_DISABLE(&htim1);
}

delay.h

// Core\Inc\delay.h
#ifndef __DELAY_H__
#define __DELAY_H__

//#include "stm32f4xx_hal.h"
#include "main.h"
#include "tim.h"

void delay_us(uint32_t Delay_us);

#endif /* __DELAY_H__ */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值