diy typedef

 

 

import os
def split(content, key):
    result = ""
    sub_str = content.split(';')
    print sub_str
    size = len(sub_str)
    print size
    tmp_key = key
    for sub_con in reversed(sub_str):
        sub_con = sub_con.strip(" ")
        print sub_con
        print tmp_key
        if sub_con == "":
            continue
        if tmp_key in sub_con:
            sub_sub_con = sub_con.split(" ")
            def_str =  sub_sub_con[1]
            sit =  def_str.find('*')
            if sit ==  -1:
                tmp_key  =  def_str
                continue
            tmp_key = def_str[:sit]
            tmp_result = def_str[sit:]
            result = tmp_result + result
        else:
            return
    result = tmp_key + result
    print result
    return result

def test():
    content = "typedef int INT; typdef aINT** INTP;"
    key = 'INTP'
    split(content, key)

test()

内容概要:本文围绕六自由度机械臂的人工神经网络(ANN)设计展开,重点研究了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程,并通过Matlab代码实现相关算法。文章结合理论推导与仿真实践,利用人工神经网络对复杂的非线性关系进行建模与逼近,提升机械臂运动控制的精度与效率。同时涵盖了路径规划中的RRT算法与B样条优化方法,形成从运动学到动力学再到轨迹优化的完整技术链条。; 适合人群:具备一定机器人学、自动控制理论基础,熟悉Matlab编程,从事智能控制、机器人控制、运动学六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)建模等相关方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握机械臂正/逆运动学的数学建模与ANN求解方法;②理解拉格朗日-欧拉法在动力学建模中的应用;③实现基于神经网络的动力学补偿与高精度轨迹跟踪控制;④结合RRT与B样条完成平滑路径规划与优化。; 阅读建议:建议读者结合Matlab代码动手实践,先从运动学建模入手,逐步深入动力学分析与神经网络训练,注重理论推导与仿真实验的结合,以充分理解机械臂控制系统的设计流程与优化策略。
### 利萨如图形与示波器 X-Y 模式 在示波器的 X-Y 模式下,通过两个通道分别输入信号,可以生成利萨如图形。这些图形能够直观地显示两个信号之间的频率和相位关系。使用 STM32 的 DAC 和定时器中断功能,可以通过改变正弦波的频率和相位来绘制不同的利萨如图形。 --- ### 使用 STM32 实现利萨如图形输出 为了实现利萨如图形输出,需要配置 STM32 的双 DAC 通道以输出两个具有不同频率和相位的正弦波。以下是实现的关键点: 1. **DAC 配置**: - 启用 STM32 的双 DAC 通道(例如 `DAC_CHANNEL_1` 和 `DAC_CHANNEL_2`)。 - 设置 DAC 输出模式为独立模式或双重模式[^1]。 2. **定时器配置**: - 使用定时器中断生成周期性事件,触发 DAC 输出更新。 - 调整定时器的预分频值(PSC)和自动重装载值(ARR)以改变输出正弦波的频率。 3. **正弦波码表**: - 创建一个正弦波采样值数组(如 `Sine256bit_0`),用于存储正弦波的数字化表示。 - 在定时器中断中,根据当前计数值从码表中读取相应的 DAC 输出值。 4. **相位调整**: - 使用结构体变量(如 `lisaru`)存储频率、幅度和相位信息。 - 通过改变码表的起始位置值来调整相位差。 --- ### 示例代码:生成利萨如图形 以下是一个完整的代码示例,展示如何使用 STM32 的 HAL 库生成利萨如图形: ```c #include "stm32f4xx_hal.h" // 定义结构体类型 typedef struct { uint32_t orifreq; /* 原始频率 */ uint32_t putfreq; /* 输出频率 */ uint16_t amp; /* 幅度 */ uint16_t pha; /* 相位 */ } lisaru; // 全局变量 uint16_t Sine256bit_0[256]; // 正弦波码表 lisaru lisa, lisb; TIM_HandleTypeDef htim2; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DAC_Init(DAC_HandleTypeDef* hdac); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); // 初始化DAC DAC_HandleTypeDef hdac; MX_DAC_Init(&hdac); // 初始化正弦波码表 for (int i = 0; i < 256; i++) { Sine256bit_0[i] = (uint16_t)(sin(2 * M_PI * i / 256) * 2047 + 2048); } // 设置结构体参数 lisa.pha = 0; // 通道1相位 lisb.pha = 90; // 通道2相位 // 配置定时器 __HAL_TIM_SET_AUTORELOAD(&htim2, 255); // 自动重装载值 HAL_TIM_Base_Start_IT(&htim2); while (1) { // 主循环 } } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { static uint16_t SineCodeTimer1 = 0; // 计算通道1的DAC输出值 uint32_t dac_value1 = Sine256bit_0[(SineCodeTimer1 + lisa.pha * 256 / 360) % 256]; HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dac_value1); // 计算通道2的DAC输出值 uint32_t dac_value2 = Sine256bit_0[(SineCodeTimer1 + lisb.pha * 256 / 360) % 256]; HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, dac_value2); SineCodeTimer1 = (SineCodeTimer1 + 1) % 256; // 更新计数器 } static void MX_DAC_Init(DAC_HandleTypeDef* hdac) { hdac->Instance = DAC; hdac->Init.Trigger = DAC_TRIGGER_NONE; hdac->Init.Mode = DAC_MODE_INDEPENDENT; hdac->Init.DataAlignment = DAC_ALIGN_12B_R; hdac->Init.OutPutBuffer = DAC_OUTPUTBUFFER_ENABLE; HAL_DAC_Init(hdac); } ``` --- ### 关键点说明 1. **正弦波码表**: - 码表 `Sine256bit_0` 存储了 256 个正弦波采样点,范围为 0 到 4095。 - 使用公式 `(sin(2 * M_PI * i / 256) * 2047 + 2048)` 将正弦值映射到适合 DAC 输出的范围[^1]。 2. **相位调整**: - 通过改变 `lisa.pha` 和 `lisb.pha` 的值,可以调整两个通道的相位差。 - 相位值被转换为码表索引偏移量,确保输出波形的相位关系正确[^1]。 3. **频率调整**: - 修改定时器的 PSC 和 ARR 值可以改变正弦波的输出频率。 - 例如,将 ARR 设置为更大的值会降低频率。 --- ### DIY 图像绘制 通过进一步调整正弦波的频率比和相位差,可以绘制复杂的 DIY 图像。例如: - 设置频率比为 2:3(即 `lisa.putfreq = 2`,`lisb.putfreq = 3`),并调整相位差,可以生成特定的几何图案。 - 使用非线性函数(如三角波或方波)代替正弦波,可以生成更复杂的图像。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值