admin 发表于 2023-6-8 18:16:44

硬件三角函数运算器, 硬件浮点运算器, 追风剑-STC32F12K64-56MHz,FOC方案征集

32位8051内置硬件:三角函数运算器,浮点运算器,250MHz-PWM
STC32F12K54-56MHz-LQFP48,8000片已到,【免费+包邮送】
LQFP48/32, QFN48/32, TSSOP20, 封装,初期优选 LQFP48
STC32位8051,STC32F12K54-56MHz 内含如下硬件运算器:
1,硬件三角函数运算器,支持
    【正弦函数/sin,余弦函数/cos,正切函数/tan,反正切函数/arctan】;
      CPU-60MHz:      
      sin/cos,270时钟/60,      <=   4.5uS
      sin/cos,32个时钟/60,大致0.5uS
2,硬件单精度浮点运算器,提供了快速的单精度浮点运算。
      FPMU支持单精度浮点数的加、减、乘、除、开方和比较,
      支持整数类型和单精度浮点数之间的转换。
3万片途中,确保【全国大学生电子设计竞赛,全国大学生智能车竞赛】

淘宝全线上架,多家第三方淘宝店 RMB2.3 销售

STC32F12K54-56MHz追风剑核心功能实验板
MCU内置硬件:三角函数运算器,浮点运算器,250MHz-PWM
https://www.stcaimcu.com/data/attachment/forum/202306/04/112815yxc60jj4vxs6mos8.png
STC32F12K54-56MHz系列 之 STC32位8051 内含如下硬件运算器:
1,硬件三角函数运算器,支持
    【正弦函数/sin,余弦函数/cos,正切函数/tan,反正切函数/arctan】;
      CPU-60MHz:      
      sin/cos,270时钟/60,      <=   4.5uS
      sin/cos,32个时钟/60,大致0.5uS
2,硬件单精度浮点运算器,提供了快速的单精度浮点运算。
      FPMU支持单精度浮点数的加、减、乘、除、开方和比较,
   支持整数类型和单精度浮点数之间的转换。
STC32F12K54-56MHz 数据手册
http://www.stcmcudata.com/STC8F-DATASHEET/STC32F12K54.pdf

STC32F12K54-56MHz追风剑核心功能实验板演示程序

更新记录
2023.06.21
1.修改例程默认时钟频率;
2.增加例程"32-自动追频跑马灯"。

2023.06.19
1.增加例程"28-老梁示波器-虚拟显示-CDC模式"及使用说明书;
2.增加例程"29-老刘爱捣鼓示波器,使用OLED屏显示或者虚拟OLED接口显示"及使用说明书;
3.增加例程"30-STC32_U8G2_DMA_OLED";
4.增加例程"31-科学计算器使用CDC虚拟液晶屏显示";
5.增加例程"A0-核心板简单测试程序";
6.增加文件"通过USB CDC协议进行STC-ISP调试接口显示使用说明";
7.增加文件"通过USB HID协议进行STC-ISP调试接口显示使用说明";
8.增加文件"追风剑-烧录-不停电下载使用说明"。

2023.06.12
1.增加例程"22-硬件单精度浮点数运算";
2.增加例程"23-DHT11温湿度数据读取-串口打印";
3.增加例程"24-STC-ISP调试接口通过UART协议驱动虚拟设备";
4.增加例程"25-STC-ISP调试接口通过USB CDC协议驱动虚拟设备";
5.增加例程"26-STC-ISP调试接口通过USB HID协议驱动虚拟设备";
6.增加例程"27-核心硬件功能初始化例程"。

I/O口对外的输出速度,30MHz 以下;
慢点, 对外辐射小;
用 DMA支持的 【串口/SPI/I2C/ADC/TFT,...】, 这样 CPU 去休息,不要焦虑的等





神农鼎 发表于 2023-6-9 21:15:25

征集 开源 FOC 电机控制方案@STC32F12K54-56MHz 为高校《单片机应用及原理》课程
===硬件材料费 www.STCAIMCU.com 出,辛苦费 RMB5000 !
有强大的专门支持FOC运算的硬件单精度浮点运算器,外部加上普通的运放就可以做FOC控制了
为32位8051世界共同进步,期待大家在此开源 STC32F12K54-56MHz-LQFP48的 FOC 方案

32位8051世界大礼,追风剑-STC32F12K54-56MHz,还是 STC的 那个 8051 回来了 !
少年强则国强,6/1 儿童节 新生代32位8051全面出击,全球 【免费+包邮】 送
硬件单精度浮点运算器/8051世界革命性的进步,64MHz 主频! 强大的DMA支持
===8K 高速 edata/堆栈/RTOS, 4k xdata/DMA缓冲区; PWM 时钟源可选 250MHz
===奋起一剑斩不周,扳倒乾坤天且休!
自带【硬件 USB 仿真】,【硬件 USB 高速下载】,同时支持【SWD仿真】,【串口仿真】
追风剑-STC32F12K54-56MHz-LQFP48转DIP48核心功能实验板
https://www.stcaimcu.com/data/attachment/forum/202306/04/112815yxc60jj4vxs6mos8.png
这个 STC32F12K54 的内部高达 [56MHz-HIRC] 的高速 HIRC,不好做,
【5.5V ~ 2V 的压飘】,【-40度 ~ +85度的温漂】,对 56MHz的内部 HIRC是一大难题 !
暂时的解决方案就是用外部 32768 RTC 时钟来自动动态追频,动态调教内部高频时钟到 56MHz,
误差在 +/- 0.3% !
用内部高速IRC取代外部高频时钟的好处是 【对外电磁辐射小,抗干扰强】

后记1,网友调侃:
平常吹水,自说水平高,现在【没能力开源个8051做的 FOC 方案,帮助大家共同进步 】!
只能说还是要虚心学习,共同进步

后记2,网友说:
目前有两个开源foc库可以参考,simpleFOC 与 Odrive,有兴趣可以移植一下

神农鼎 发表于 2023-6-9 21:26:12





STC32F12K54-56MHz-LQFP48大学计划实验箱















神农鼎 发表于 2023-6-9 21:35:00

32位8051是指:
KEIL C51支持的8051程序,在 KEIL C251编译器重新编译后,烧录进 STC32,
STC32能运行原来8051的源程序经过KEIL C251编译器重新编译后的目标代码,
但速度不会降下来,一定是提升的

x86, x51的概念

电子电工单片机 发表于 2023-6-9 22:37:20

外观小巧便携,入手体验,爱不释手,官方出品,必属精品!


神农鼎 发表于 2023-6-10 12:15:22

开心,这是 8051 世界 的一大步

神农鼎 发表于 2023-6-11 09:29:57

STC32F12K54-56MHz-LQFP48追风剑之实验箱讨论稿
https://www.stcaimcu.com/data/attachment/forum/202306/10/121353za03ottcs7cjjiax.png
https://www.stcaimcu.com/data/attachment/forum/202306/10/105926t6iza63iw5wwa6kl.png
https://www.stcaimcu.com/data/attachment/forum/202306/10/105926tjzoo3j11nw2zh22.png
https://www.stcaimcu.com/data/attachment/forum/202306/10/105926qw5amfw45nwrwg4b.png
管脚不够,外挂 74HC595/RMB0.15来解决,或I2C/SPI/UART 外挂 :
STC8H1K08-36I-TSSOP20,    RMB0.99 扩展I/O ;
STC8H8K64U-45I-TSSOP20,RMB1.4 扩展I/O ;
STC8H8K64U-45I-LQFP32,   RMB1.9 扩展I/O ;
STC8H8K64U-45I-LQFP48,   RMB2.2 扩展I/O ;
STC8H8K64U-45I-LQFP64,   RMB2.5 扩展I/O ;
这样成本更低
https://www.stcaimcu.com/data/attachment/forum/202306/10/105926zue5c7s02059e685.png

神农鼎 发表于 2023-6-12 15:46:00

STC32F12K54-56MHz, 追风剑, RMB2起
32位8051, 56MHz 主频,硬件单精度浮点, 硬件USB仿真
edata = 8k, xdata = 4k, DMA支持:【2组CAN, 4组串口, 3组SPI, I2C, I2S, 真12位ADC, TFT】
STC32F12K54-56MHz-LQFP48/32, TSSOP20, QFN48/32,硬件USB下载/仿真, SWD仿真
【负压电磁组】,【完全模型组】,【单车越野组】
全国智能车竞赛【负压电磁组】指定必须使用STC32参加比赛 ! www.STCAIMCU.com
全国智能车竞赛【完全模型组】和【单车越野组】这两组也推荐使用STC32位8051参与比赛
https://www.stcaimcu.com/data/attachment/forum/202306/12/154120ent4ez4hhuur42uh.png

全部【免费+包邮送】, 48-Pin 可以满足如下三组竞赛要求
全国智能车竞赛【负压电磁组】指定必须使用STC32参加比赛,48-Pin满足需求
全国智能车竞赛【完全模型组】和【单车越野组】这两组也推荐使用STC32位8051参与比赛
STC32G12K128-35I-LQFP64/48/32, QFN64/48/32, TSSOP20, PDIP40
STC32G8K64-42I-LQFP48/32,以上都可以用于这3个组别的主控部分 !
清华卓晴老师说LQFP48够了,逐飞范总电话沟通说有硬件单精度浮点算力足够处理这3组的要求
===其实就是【单车越野组】有STC32F的单精度浮点支持为好
其他所有组别的电调部分都可以使用STC的参考方案,可以用STC的任何一款芯片来实现电调部分

jmg 发表于 2023-6-13 04:36:41

神农鼎 发表于 2023-6-11 09:29
STC32F12K54-64MHz-LQFP48追风剑之实验箱讨论稿




Nice board, but on a board that large, I had hoped to see an I2S Audio Stereo DAC ?
STC32F has I2S support plus the FPU means you could generate quite useful real-time sine waves as a demo instrument ?

zhp 发表于 2023-6-13 19:59:01

250MHz时钟源 PWM, STC32F12K54-56MHz
——高速PWM应用1:高速PWM输出
——高速PWM应用2:捕获外部高速脉宽(查询方式)
——高速PWM应用3:捕获外部高速脉宽(中断方式)

高速PWM应用1:   高速PWM输出
高速PWM可使用内建500MHz高速HPLL作为时钟源【输出高速PWM】/【捕获外部高速脉宽】
(注:500MHz的HPLL时钟2分频输出50%占空比的PLL输出时钟可作为高速PWM的时钟源)
/*************功能说明    **************

时钟说明:由内部IRC产生24MHz的时钟分频为6M提供给HPLL当作HPLL输入时钟,PLL锁频到246MHz输出作为高速PWM的时钟源,

PWM高速输出说明:PWMA的CC1通道配置为输出模式,并从P1.0/P1.1口输出频率为2.46MHz,占空比为50%的互补对称带死区的PWM波形

下载时, 选择默认IRC时钟 24MHz。

******************************************/

#include "stc32g.h"

#define FOSC            24000000UL

#define HSCK_MCLK       0
#define HSCK_PLL      1
#define HSCK_SEL      HSCK_PLL

#define HSIOCK          0x40

#define ENHPLL          0x80
#define HPLLDIV_52      0x00
#define HPLLDIV_54      0x01
#define HPLLDIV_56      0x02
#define HPLLDIV_58      0x03
#define HPLLDIV_60      0x04
#define HPLLDIV_62      0x05
#define HPLLDIV_64      0x06
#define HPLLDIV_66      0x07
#define HPLLDIV_68      0x08
#define HPLLDIV_70      0x09
#define HPLLDIV_72      0x0A
#define HPLLDIV_74      0x0B
#define HPLLDIV_76      0x0C
#define HPLLDIV_78      0x0D
#define HPLLDIV_80      0x0E
#define HPLLDIV_82      0x0F

#define ENCKM         0x80
#define PCKI_MSK      0x60
#define PCKI_D1         0x00
#define PCKI_D2         0x20
#define PCKI_D4         0x40
#define PCKI_D8         0x60

void delay()
{
    int i;

    for (i=0; i<100; i++);
}

char ReadPWMA(char addr)
{
    char dat;
   
    while (HSPWMA_ADR & 0x80);            //等待前一个异步读写完成
    HSPWMA_ADR = addr | 0x80;               //设置间接访问地址,只需要设置原XFR地址的低7位
                                          //HSPWMA_ADDR寄存器的最高位写1,表示读数据
    while (HSPWMA_ADR & 0x80);            //等待当前异步读取完成
    dat = HSPWMA_DAT;                     //读取异步数据
   
    return dat;
}

void WritePWMA(char addr, char dat)
{
    while (HSPWMA_ADR & 0x80);            //等待前一个异步读写完成
    HSPWMA_DAT = dat;                     //准备需要写入的数据
    HSPWMA_ADR = addr & 0x7f;               //设置间接访问地址,只需要设置原XFR地址的低7位
                                          //HSPWMA_ADDR寄存器的最高位写0,表示写数据
}

int main()
{
    EAXFR = 1;
   
    P0M0 = 0; P0M1 = 0;
    P1M0 = 0; P1M1 = 0;
    P2M0 = 0; P2M1 = 0;
    P3M0 = 0; P3M1 = 0;
    P4M0 = 0; P4M1 = 0;
    P5M0 = 0; P5M1 = 0;

    //选择HPLL输入时钟分频,保证输入时钟为6M
    USBCLK &= ~PCKI_MSK;
#if (FOSC == 6000000UL)
    USBCLK |= PCKI_D1;                      //PLL输入时钟1分频
#elif (FOSC == 12000000UL)
    USBCLK |= PCKI_D2;                      //PLL输入时钟2分频
#elif (FOSC == 24000000UL)
    USBCLK |= PCKI_D4;                      //PLL输入时钟4分频
#elif (FOSC == 48000000UL)
    USBCLK |= PCKI_D8;                      //PLL输入时钟8分频
#else
    USBCLK |= PCKI_D4;                      //默认PLL输入时钟4分频
#endif

    //设置HPLL的除频系数
//    HPLLCR = HPLLDIV_52;                  //F_HPLL=6M*52/2=156M
//    HPLLCR = HPLLDIV_54;                  //F_HPLL=6M*54/2=162M
//    HPLLCR = HPLLDIV_56;                  //F_HPLL=6M*56/2=168M
//    HPLLCR = HPLLDIV_58;                  //F_HPLL=6M*58/2=174M
//    HPLLCR = HPLLDIV_60;                  //F_HPLL=6M*60/2=180M
//    HPLLCR = HPLLDIV_62;                  //F_HPLL=6M*62/2=186M
//    HPLLCR = HPLLDIV_64;                  //F_HPLL=6M*64/2=192M
//    HPLLCR = HPLLDIV_66;                  //F_HPLL=6M*66/2=198M
//    HPLLCR = HPLLDIV_68;                  //F_HPLL=6M*68/2=204M
//    HPLLCR = HPLLDIV_70;                  //F_HPLL=6M*70/2=210M
//    HPLLCR = HPLLDIV_72;                  //F_HPLL=6M*72/2=216M
//    HPLLCR = HPLLDIV_74;                  //F_HPLL=6M*74/2=222M
//    HPLLCR = HPLLDIV_76;                  //F_HPLL=6M*76/2=228M
//    HPLLCR = HPLLDIV_78;                  //F_HPLL=6M*78/2=234M
//    HPLLCR = HPLLDIV_80;                  //F_HPLL=6M*80/2=240M
    HPLLCR = HPLLDIV_82;                  //F_HPLL=6M*82/2=246M

    //启动HPLL
    HPLLCR |= ENHPLL;                     //使能HPLL

    delay();                              //等待HPLL时钟稳定

    //选择HSPWM/HSSPI时钟
#if (HSCK_SEL == HSCK_MCLK)
    CLKSEL &= ~HSIOCK;                      //HSPWM/HSSPI选择主时钟为时钟源
#elif (HSCK_SEL == HSCK_PLL)
    CLKSEL |= HSIOCK;                     //HSPWM/HSSPI选择PLL输出时钟为时钟源
#else
    CLKSEL &= ~HSIOCK;                      //默认HSPWM/HSSPI选择主时钟为时钟源
#endif

    HSCLKDIV = 0;                           //HSPWM/HSSPI时钟源不分频
   
    HSPWMA_CFG = 0x03;                      //使能PWMA相关寄存器异步访问功能
   
    PWMA_PS = 0x00;                         //PWMA_CC1/CC1N高速PWM输出到CC1/CC1N口
                                          //注意:PWMA_PS属于I/O控制寄存器,不能使用异步方式进行读写

    //通过异步方式设置PWMA的相关寄存器
    WritePWMA((char)&PWMA_CCER1, 0x00);
    WritePWMA((char)&PWMA_CCMR1, 0x00);   //CC1为输出模式
    WritePWMA((char)&PWMA_CCMR1, 0x60);   //OC1REF输出PWM1(CNT<CCR时输出有效电平1)
    WritePWMA((char)&PWMA_CCER1, 0x05);   //使能CC1/CC1N上的输出功能
    WritePWMA((char)&PWMA_ENO, 0x03);       //使能PWM信号输出到端口P1.0/P1.1
    WritePWMA((char)&PWMA_BKR, 0x80);       //使能主输出
    WritePWMA((char)&PWMA_CCR1H, 0);      //设置PWM占空比为50个PWM时钟
    WritePWMA((char)&PWMA_CCR1L, 50);
    WritePWMA((char)&PWMA_ARRH, 0);         //设置输出PWM的周期为100个PWM时钟
    WritePWMA((char)&PWMA_ARRL, 99);
    WritePWMA((char)&PWMA_DTR, 10);         //设置互补对称输出PWM的死区
    WritePWMA((char)&PWMA_CR1, 0x01);       //开始PWM计数

//P2 = ReadPWMA((char)&PWMA_ARRH);      //异步方式读取寄存器
//P0 = ReadPWMA((char)&PWMA_ARRL);

    while (1);
}






页: [1] 2 3
查看完整版本: 硬件三角函数运算器, 硬件浮点运算器, 追风剑-STC32F12K64-56MHz,FOC方案征集