直流无刷电机控制板
想法来源?
这个板子只有2个按键,
S2控制正转
速度 ,S1增加反转
速度(短按)
;
没有reset键
,每次执行完1程序,我都得重新下载,很麻烦。
----->所以就想给它增加一个系统初始化
的功能(长按)
;
达到了设置的延长时间后,蜂鸣器就会响(标志可以松手,系统初始化)
怎么做?
按键S1、S2按下 处于
低电平
(接地)
void KEY_Process(void)
{
uint32_t count=0;
key1_state=HAL_GPIO_ReadPin(DIN1_GPIO_Port,DIN1_Pin);
key2_state=HAL_GPIO_ReadPin(DIN2_GPIO_Port,DIN2_Pin);
//-----增加的代码------增加的代码------增加的代码-----增加的代码------增加的代码------增加的代码
while(!KEY1_S1_PRESS)//如果S1按下(一直处于低电平)
{
count++;//count 开始计数
if(count>LONG_KEY_DELAY) //如果 count 超过 设定值
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, !GPIO_PIN_RESET); //把PA5 置为0
}
}
if(count>LONG_KEY_DELAY)
{
SoftReset();
}
//------增加的代码------增加的代码------增加的代码------增加的代码------增加的代码------增加的代码
if(key1_state<key1_state_b)
target_speed+=1000;
if(key2_state<key2_state_b)
target_speed-=1000;
if(target_speed>20000)
target_speed=20000;
if(target_speed<-20000)
target_speed=-20000;
if((key1_state==0)&&(key2_state==0))
{
key12_count++;
}
if(key12_count>5000)
{
key12_count=0;
//find_commutation_and_set_tamagawazero();
}
key1_state_b=key1_state;
key2_state_b=key2_state;
}
注意
1、此处的 count
的类型
与
LONG_KEY_DELAY
的大小有关,我之前用的是uint8_t
,而LONG_KEY_DELAY
设为10000,超过了变量的范围(详细说明在下方),值溢出,现象出不来,改成uint32_t
就可以了
知识扫盲:什么是*_t
以下内容引出自 https://blog.csdn.net/weixin_40700884/article/details/104785995
typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
uint8_t
实际上就是一个char
,所以输出uint8_t
类型的变量实际上输出对应的字符
,而不是数值
,比如:
uint8_t num=67;
cout << num << endl; //输出结果为字母C
首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。
以上内容引出自 https://blog.csdn.net/weixin_40700884/article/details/104785995
2、将SPI口用来接 蜂鸣器
这里要使用
SPI口
用来接蜂鸣器
要先把main
中的MX_SPI1_Init();
注释掉,否则它不会响。。。。
对
PA5
进行初始化,同时把该口设置为低电平
为后面蜂鸣器
(高电平触发)的使用做准备
GPIO_InitStruct.Pin = GPIO_PIN_5; //PA5
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL; //上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //高速
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,RESET);