首页
关于我
友链
小程序
舔狗日记
小黑屋
音乐解锁
阿狸和桃子
Search
1
将校园卡复制到小米手环
23 阅读
2
windows11系统自带VPN连接不上群辉VPN服务器问题
19 阅读
3
使用ESP8266完成校园网WEB认证
18 阅读
4
Verilog中为inout类型赋值
16 阅读
5
数字振镜XY2-100协议
13 阅读
技术
生活
登录
Search
标签搜索
qt
mqtt
FreeRTOS
stm32
iar
VPN
光猫破解
esp8266
群晖
VideoStation
exti
c++
eclipse
bootloader
pixhawk
遥控器
失控保护
ARM
NAS
ENPASS
AMENG
累计撰写
79
篇文章
累计收到
17
条评论
首页
栏目
技术
生活
页面
关于我
友链
推荐
舔狗日记
小黑屋
音乐解锁
阿狸和桃子
搜索到
2
篇与
的结果
2021-12-25
调试STM32F207编码器时遇到的问题
一个项目需要对电机闭环控制,采用的霍尔编码电机。本来用的STM32F103ZET6,然后不知道咋回事芯片发热烧坏了,然后正好有一批STM32F207ZET6,对比了下IO口发现一样,就直接干上去了,干上去后发现3.3和GND处于短路状态,开始怀疑是3.3V电压出问题了,就把3.3V供电部分全部拆除了,发现还是短路,就又把芯片引脚仔细对了一遍,发现供电引脚有几个对不上。如下图由于VSS和VDD芯片能不是相连的,所以少一路供电应该问题不大,就直接把这几个引脚掰断干上去了,烧下测试代码,成功运行,至此换芯片结束。代码部分直接换库文件,移植过程还算简单。但当调到编码器时,一直没有读数。一度怀疑是不是掰断那几个引脚引起的问题,无奈之下用STM32CubeMX生成的代码测试一下,发现可以正常读数,遂排除了硬件问题。然后对比发现了问题调整前的代码GPIO_PinAFConfig(GPIOA,GPIO_Pin_9,GPIO_AF_4);GPIO_PinAFConfig(GPIOA,GPIO_Pin_10,GPIO_AF_4);调整后的代码GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_4);GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_4);不难看出,调整的就是上面红色参数部分。一个是GPIO_Pin_N,一个是GPIO_PinSourceN,其实这2个参数是不一样的。GPIO_Pin_n可以理解为某端口脚在整个端口的位置。比方某GPIO口的第6管脚位置编码GPIO_Pin_6 被定义为 ((uint16_t)0x0040) ,在对相应GPIO管脚做基本属性配置时会用到,如配置输入输出模式、模拟输入模式的选择等。有兴趣的话,可以点击GPIO_Init( )进去看看。而GPIO_PinSourceN一般是在对某GPIO口相应pin脚的复用功能进行选择配置才会用到。它是根据端口各脚位的位置按顺序从0开始依次递增编号,可以理解为该管脚在该端口的序号。比方某GPIO口的第6号复用功能脚的序号GPIO_PinSource6 被定义为 ((uint8_t)0x06) 。有兴趣的话,也可以打开GPIO_PinAFConfig( )函数看看。显然,GPIO_PinSource6跟上面的GPIO_Pin_6的值相差甚远。下面是ST官方库代码中有关GPIO_Pin_N的定义:#define GPIO_Pin_0 ((uint16_t)0x0001)#define GPIO_Pin_1 ((uint16_t)0x0002)#define GPIO_Pin_2 ((uint16_t)0x0004)#define GPIO_Pin_3 ((uint16_t)0x0008)#define GPIO_Pin_4 ((uint16_t)0x0010)#define GPIO_Pin_5 ((uint16_t)0x0020)#define GPIO_Pin_6 ((uint16_t)0x0040)#define GPIO_Pin_7 ((uint16_t)0x0080)#define GPIO_Pin_8 ((uint16_t)0x0100)#define GPIO_Pin_9 ((uint16_t)0x0200)#define GPIO_Pin_10 ((uint16_t)0x0400)。。。。。。#define GPIO_Pin_15 ((uint16_t)0x8000)#define GPIO_Pin_All ((uint16_t)0xFFFF)下面是有关GPIO_PinSourceN的定义:#define GPIO_PinSource0 ((uint8_t)0x00)#define GPIO_PinSource1 ((uint8_t)0x01)#define GPIO_PinSource2 ((uint8_t)0x02)#define GPIO_PinSource3 ((uint8_t)0x03)#define GPIO_PinSource4 ((uint8_t)0x04)#define GPIO_PinSource5 ((uint8_t)0x05)#define GPIO_PinSource6 ((uint8_t)0x06)#define GPIO_PinSource7 ((uint8_t)0x07)#define GPIO_PinSource8 ((uint8_t)0x08)#define GPIO_PinSource9 ((uint8_t)0x09)#define GPIO_PinSource10 ((uint8_t)0x0A)。。。。。。#define GPIO_PinSource15 ((uint8_t)0x0F)贴出编码器驱动代码void Encoder3_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = TIM3_CH1_PIN | TIM3_CH2_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(TIM3_CH1_GPIO, &GPIO_InitStructure); //引脚映射 GPIO_PinAFConfig(TIM3_CH1_GPIO, GPIO_PinSource6, GPIO_AF_TIM3); GPIO_PinAFConfig(TIM3_CH1_GPIO, GPIO_PinSource7, GPIO_AF_TIM3); //定时器设置 TIM_DeInit(TIM3); TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Prescaler = 0; //时钟分频 TIM_TimeBaseStructure.TIM_Period = 65535;//计数器最大值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;// 时钟分频:不分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化计时器 //编码器模式设置 TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12,TIM_ICPolarity_Rising , TIM_ICPolarity_Rising ); TIM_ICStructInit(&TIM_ICInitStructure); TIM_ICInitStructure.TIM_ICFilter = 15; TIM_ICInit(TIM3, &TIM_ICInitStructure); TIM_SetCounter(TIM3,0); TIM_Cmd(TIM3, ENABLE); }方向读取encoder_1 = (TIM3->CR1 & 0X10)>>4;数据读取num = TIM3->CNT;读取后清零TIM3->CNT = 0;
2021年12月25日
0 阅读
0 评论
0 点赞
2021-12-22
电磁阀、电磁铁的工作原理说明
1、电磁铁什么是电磁铁?电磁铁是一个带有铁芯的螺线管。电磁铁的磁性跟哪些因素有关?电流和线圈匝数。电磁铁通电时可以产生电磁,断电时电磁消失;比如通电时电磁铁吸引大头针,断电时电磁铁不吸引大头针。电磁铁的优点:1>电磁铁磁性的有无,可以通断电来控制;2>电磁铁磁性强弱,可以改变电流大小来控制;3>电磁铁的极性变换,可以改变电流方向来控制。2、电磁阀什么是电磁阀?电磁阀是由几个气路和阀芯组成的,由阀芯控制各个气路之间接通或者断开。电磁阀分为直动式电磁阀和先导式电磁阀。先导式电磁阀则是在电磁力的作用下先打开先导阀,使气体进入电磁阀阀芯气室,利用气压来推动电磁阀阀芯,实现气路之间的通断。工作原理:得电时利用电磁线圈产生的电磁力的作用,推动阀芯运动,实现各个气路的通断,单电控的失电时在弹簧力的作用下回复原位,双电控的保持原位,先导式的按功能而定。几位几通:电磁阀的阀芯有几种位置就是几位,几个气路就是几通电磁阀,一般有2位3通、2位4通、2位5通、3位5通等。电磁阀电压:一般分为220V、110V、24V。功能:在电-气动控制中,电磁阀可以实现的功能有:气动执行组件动作的方向控制,ON/OFF开关量控制,OR/NOT/AND逻辑控制;电磁阀是在气动回路中控制气路通道的通、断或改变压缩空气的流动方向;电磁阀只是气动调节阀的一个附件,是控制气动阀门的气源电路的。下面具体讲解一下二位三通电磁阀的结构:(学电子的同学可以简单理解为单刀双置开关)如下图所示,电磁阀阀芯有2个位置,有3个气路接口,P为气源接口,A为通往气动执行器接口,R为排气接口。1、初始状态(失电):如图2,此时电磁阀失电,阀芯在右侧,A口与R口相通,气缸是排气状态,P口是封闭的。此时AR相通。 图12、工作状态(得电),此时电磁阀得电,阀芯被电磁力吸到左侧,P口如果失电,阀芯在弹簧的作用下回到2的初始状态。此时AP相通。 图2下面讲解一下2位5通单电控直动式电磁阀。1、(失电状态)简单描述为AP,BS。 图32、(得电状态)AR/BP。 图4双电控直动式电磁阀类似。注意哪侧吸电就运动到那一侧。双电控的电池阀具有记忆功能,假如初始状态如下,则右侧得电还是如下: 图5左侧得电则如下 图6电磁阀的图示符号: 图7如果为2位3通电磁阀的电气符号图,图中左侧的方框是指得电状态,右侧是指失电状态,左侧小长方形是指电磁线圈,右侧折线是指弹簧,所以靠近弹簧侧的方框是失电状态,靠近线圈侧的方向是得电状态。默认状态是排气。
2021年12月22日
0 阅读
0 评论
0 点赞