- 博客(108)
- 收藏
- 关注
原创 7.7、Python-常用内置函数
input输出的是字符串类型,用eval将其转成数值类型。字符类型的小数不能直接转成 int类型的数;结果为迭代器对象,需要转换成列表才能看到。将对象都执行一次函数,并将结果留下来。非数的字符不能转成 int 类型;将结果为True的留下来。
2025-11-17 21:27:56
384
原创 5.2、Python-字符串的编码和解码
errors:错误的解决方案,(strict:严格的,错了直接报错;ignore:忽略;replace:用问号替换转不了的字符)默认编码格式为utf-8,中文占3个字节;gbk中文占2个字节;
2025-11-11 22:25:58
473
原创 3.1、Python-列表
end省略,默认到最后一个元素(包含最后一个元素);reverse:False升序,True降序;start省略,默认从0开始;step省略,step默认1;反向索引范围 -1 ~ -N。(3)enumerate枚举。正向索引范围 0~N-1。step为-1,逆序输出。start可省略不写。
2025-11-07 21:53:01
448
原创 1、Python-内置函数、Pass空语句
list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] # 使用 zip 函数打包两个列表 zipped = zip(list1, list2) # 将迭代器转换为列表 result = list(zipped) print(result)zip() 函数用于将多个可迭代对象(如列表、元组、字符串等)中的元素打包成一个个元组,然后返回由这些元组组成的迭代器。5、dir(对象):查看对象具有的属性或方法。1、len(a):字符串长度(字符个数)2、id():查看地址。
2025-11-03 20:03:15
327
原创 4-1 双环PID
如果内环是速度环,外环是位置环,那么内环的实际值读取的就是实际速度,外环的实际值读取的就是实际位置。Encoder_Get函数在整个工程里只能调用一次,想同时获取速度和位置需要再定义两个变量。外环的目标值由自己控制,内环目标值由外环输出值控制。外环调控周期要>=内环调控周期。减小输出限幅可以降低旋转速度。调参顺序:先内环再外环。
2025-07-07 21:32:03
617
原创 3-3 PID-输出偏移和输入死区
虽然由于摩擦等原因,导致误差很小时转盘不动,但输出值不为0,一直有不必要的功耗。问题:目标值一直抖动,实际值与目标值一直存在误差,导致转盘一直抖动。解决方法:限制误差范围(在一定误差范围内不进行调控)测试一下,确定偏移值的大小。
2025-07-06 10:31:54
327
原创 3-2 PID算法改进(微分部分)
目标值切换导致微分项输出产生尖峰,有时不好,这个尖峰是由D项导致的(目标值突然变化,误差的斜率突然变得很大,导致D项很大)如果对P、I、D三项都加滤波,那么波形的相位就会滞后,导致PID的响应速度降低,不适合对响应速度有要求的项目。α范围0~1,用于调节滤波强度(改变本次输出和上次输出的权重),α越大,滤波作用越强。信号中的噪声对微分项影响最大,对P项和I项影响有限,因此一般只给微分项加滤波器。可对微分项加滤波,也可对原始数据加滤波(即对P、I、D三项都加滤波);有时不加微分先行会让实际输出变得更加迅速;
2025-07-06 10:30:25
560
原创 2-2 PID-代码部分
调试过程中可能会出现按一下按键,电机满转的现象,原因是电机和编码器的极性相反(给电机一个正向驱动力,编码器测速的值却是负的,计算公式就会认为应该加大Out使速度为正,此时本来我们想要的负反馈就变成了正反馈,即误差变得更大了,最终电机满转),将它们都改成顺时针为正或者都为逆时针为正就行了。增量式PID的Out比较依赖上一次Out,如果上一次的Out是错误的,那么增量式PID后续的调节就会持续受到这个错误影响,没有积分项的增量式PID,容易出现实际值与目标值偏移的问题,增量式PID的Ki最好不要设为0。
2025-07-04 22:37:57
848
原创 2-1 PID-底层代码模块
(4)AD——>RP(电位器):目的通过电位器来改变Kp,Ki,Kd。(7)Encoder编码器。(3)Timer定时器。(8)Serial串口。
2025-07-03 19:29:46
232
原创 1-2 PID-连续、离散形式的PID公式
定时时间到了,中断函数中flag置1,中断函数退出,在主循环里不断检查flag。好处:所以涉及硬件的操作都在主程序中进行,不会产生资源访问冲突。弊端:如果主程序代码过多或主程序阻塞了,PID可能无法及时执行,从而导致调控周期不准确。
2025-07-03 19:28:54
1097
原创 3.3.1、CAN总线-中断式接收
原来的方法是查询接收对单个帧的接收,一般用查询接收,还能充分利用接收FIFO的3个缓存区CAN数据帧最大只能传输8个字节数据,如果有超过8个字节的数据,必须得分多帧传输,此时可对中断接受的程序进行改进,每收到一帧数据就进中断暂存,直到收到完整的所有帧的数据,才置标志位,让主程序处理中断配置,写在CAN_Init之前。
2025-07-01 17:16:53
646
原创 3.1.2、CAN总线单个设备环回测试代码部分
(1)16位列表模式:IdHigh,IdLow,MaskIdHigh,MaskIdLow这四个参数分别存入一组ID,可存4个标准ID。需要两个函数,一个判断接收FIFO里是否有报文,另一个读取接收FIFO,把报文内容取出来。MaskIdHigh、MaskIdLow组合到一起,存入第二组32位ID;MaskIdHigh、MaskIdLow组合到一起,存入对应屏蔽位;IdHigh存入第一组ID,MaskIdHigh存入对应的屏蔽位;IdLow存入第二组ID,MaskIdLow存入对应的屏蔽位;
2025-06-29 20:34:48
1165
原创 2.2.5、CAN总线-错误处理和离线恢复
(1)TEC:发送错误计数器;REC:接收错误计数器;错误计数器增加和减少方式在1.5(2)主动错误、被动错误、离线状态之间的转换与CAN协议规定的一样(在1.5)
2025-06-28 15:41:57
440
原创 2.2.4、CAN总线-时间触发通信(了解即可)
该功能可对所有节点进行同步调度,即每个节点只在一个固定的时间段内进行发送报文,这样可以避免优先级仲裁。是ISO11898-4协议里规定的更高级的功能。
2025-06-28 15:40:55
244
原创 2.2.3、CAN总线-位时间特性、中断
(1)发送中断:当写入发送邮箱并请求发送后,当这个发送邮箱空的时候,CAN外设就可以请求发送中断;如果代码中允许了该中断并且配置了NVIC,则程序就会在发送邮箱空时进入发送中断函数。当CAN外设内部发生一些重要的事件时,程序可以自动跳转到中断函数执行,及时处理重要任务。(2)FIFO0收到一个报文,FMP0不再是0的时候就可以触发中断;各个中断信号输出的通过或门,输出到NVIC,请求中断;(3)对应的中断允许位为1时,允许中断信号通过与门;当中断允许位为1时,与门输出固定为0,中断信号无效;
2025-06-28 15:39:53
537
原创 2.2.2、CAN总线-测试模式、工作模式
(2)环回模式:自己发自己收,同时也可以向总线发送数据。(1)静默模式:自己发自己收,同时也可以接收总线数据。(3)环回静默模式:自发自收,同时与外界隔绝。INAK=0,硬件目前没有确认进入初始化模式。SLAK=0,硬件已经确认没有进入睡眠模式。INAK=1,硬件目前确认进入初始化模式;SLAK=1,硬件已经确认进入睡眠模式;SLEEP=1,请求进入睡眠模式;只有在总线空闲时才能进入空闲模式。SLEEP=0,请求退出睡眠;INRQ=1,请求进入初始化;INRQ=0,请求退出初始化;
2025-06-27 16:14:22
311
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅