DavidZH

  • 2024-11-20
  • 回复了主题帖: 有奖直播 | 报名STM32全球线上峰会,了解重磅新品!

    强势围观

  • 2024-11-17
  • 发表了主题帖: 【DigiKey 评测之ST应用于车窗升降的L99H92直流电机驱动】开箱与介绍

    本帖最后由 DavidZH 于 2024-11-17 19:24 编辑          有幸获得由EEWORLD 举办,DigiKey 提供基于ST L99H92 直流马达驱动与NUCLEO-G474RE控制板测评的机会,目前已经拿到2快开发板: 一、STM32 NUCLEO-G474RE                   该板子还是一如既往采用兼容ARDUINO® Uno V3 接口且 板载STLINK-V3E 下载与调试的蝴蝶板;                  主芯片为 64Pin ,STM32G474RET6 具体资源如下:                             主频:Arm® Cortex®-M4 at 170 MHz                                                          内存: 512KB Flash  和128KB SRAM    NUCLEO-G474RE   板载资源如下:主要包括调试和编程部分、STM32G4 主控以及外部电路, IO 口部分, 电源输入输出回路;         在IO 口部分,板子兼容Arduino 和ST  的Morpho 接口,也就是说我们可以采用Arduino 的固件对STM32 NUCLEO-G474RE  进行驱动来进行快速验证,具体描述如下; 图中我们可以清楚的看见各个管脚的定义;     硬件连接可以参考如下图,能快速方便的找到相应的功能; 主要为CN5,CN6,CN8,CN9 四个接口;   该四个口的功能定义如下,从图中可以了解到,I2C,UART,SPI, PWM, ADC 都可以实现,后期的硬件连接需要参考该功能定义;       二、AEK-MOT-WINH92开发板;             该开发板是一款基于ST 的l99h92 预驱动芯片的直流电机驱动开发板,可用于汽车应用的产品中;     2.1、AEK-MOT-WINH92 板载资源的介绍:           驱动电压输入口标志是12V,实际上可以输入的电压在5.41 V至28 V,因此对于车机的12V 或者24V 电压可以直接用;           用于与主机通讯的SPI 口;           诊断输出和使能控制;           DC 电机接口;     从L99H92 的典型电路中可以看出,需要搭配外置MOSFET 实现DC 电机的驱动; 内置运放可以实现对电机电流的检测;   主驱动芯片L99H92 芯片的功能分部如下,与如上的实际电路对应;   通过阅读规格书,可以清楚的了解到L99H92 芯片的相关特性完全可以用于汽车应用产品中;           支持的保护:短路保护、可编程死区时间、 热保护装置、欠压和过压保护           诊断输出:通过SPI为所有输出提供诊断信息、用于MCU监控的看门狗、诊断输出引脚连接到微控制器,用于检测设备故障;           输出: 2x半桥或1x全桥栅极驱动器、两个独立的电流检测输出,具有可编程增益和输入           汽车级别特性: 支持AEC-Q100 标准;          工作温度:-40℃~150℃

  • 2024-09-12
  • 回复了主题帖: 基于STM32F7的视觉小球颜色识别系统-物体跟踪效果

    eew_5c9pVM 发表于 2024-8-26 01:42 可以分享一下文本资料和code吗 参考OPENMV 的识别物体的方法

  • 2024-08-05
  • 回复了主题帖: >>征集 | 使用 MCU,哪些问题最令你头大?

    MCU的生态很重要,MCU已经进去了快速开发的时代,能有效的开发出所需要的功能,是需要芯片厂商和方案商共同推进,不仅需要相应的demo例子和total sulotion,更需要芯片本身具备相关优势,才能得到开发者的青睐

  • 2024-07-26
  • 回复了主题帖: 灯哥基于esp32的开源FOC电机驱动资料(不足百元,可自行搞DIY)

    le062 发表于 2021-8-24 07:51 现在只有国产SOC适合DIY了,MCU都是天价。 哪里天价, MCU 一般都只要0.4-0.5$(国外品牌), Gate driver +mosfet 低压的低到离谱;

  • 回复了主题帖: 从娃娃说起——谈电机驱动的安全性

    个人的一些看法; 电机的安全在于主动安全和被动安全; 比如电机在启动和停止时候,必须能精准控制; 电机在正常工作时候的电机的速度和方向是能控制; 在以上场景中,过热,过压等必须得实时监测和控制; 另外本身质量必须得可靠,三无产品的电机不能用; 另外电机在接触到人的时候会自动停止,保证人安全;      基于以上看法,对于电机安全       1、可以选用安全可靠的驱动器, 比如英飞凌的功率器件;        2、对于电机的加密,可以选用英飞凌的加密芯片,保证电机来源可靠;        3、对于主动人体检测,可以参考英飞凌的雷达做人体存在检测;        

  • 2024-05-19
  • 发表了主题帖: 【Beetle ESP32 C6 Mini 】外设之 SPI 驱动ST7789 TFT

    Beetle ESP32 C6 Mini  的SPI 外设有一组硬件的资源如下: SCK->GPIO23 MOSI->GPIO22 MISO->GPIO21 CS 则可以设计为任何其他GPIO 管脚;       对于TFT 屏幕驱动,一般会选择LVGL+TFT_eSPI 实现,通过查询可以知道TFT_eSPI 目前还没有支持到Esp32-C6 所有直接采用ST7789 库来驱动;   安装ST7789 库; 在Arduino 中搜索ST7789 就可以看见相应的库;点击安装即可安装完成;   ESP32C6 与 ST7789 TFT LCD 的硬件连接; ST7789 的电容触摸屏分为驱动和触摸部分,不需要触摸则只需要连接驱动部分;   LCD 屏幕和ESP32-C6 硬件连接;       软件代码修改:安装以上硬件连接修改如下;   修改屏幕尺寸:   具体代码如下: #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7789.h> // Hardware-specific library for ST7789 #include <SPI.h> #if defined(ARDUINO_FEATHER_ESP32) // Feather Huzzah32 #define TFT_CS 7 #define TFT_RST 5 #define TFT_DC 6 #elif defined(ESP8266) #define TFT_CS 4 #define TFT_RST 16 #define TFT_DC 5 #else // For the breakout board, you can use any 2 or 3 pins. // These pins will also work for the 1.8" TFT shield. #define TFT_CS 7 #define TFT_RST 5 // Or set to -1 and connect to Arduino RESET pin #define TFT_DC 6 #endif // OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique // to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and // SCLK = pin 13. This is the fastest mode of operation and is required if // using the breakout board's microSD card. Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); // OPTION 2 lets you interface the display using ANY TWO or THREE PINS, // tradeoff being that performance is not as fast as hardware SPI above. #define TFT_MOSI 22 // Data out #define TFT_SCLK 23 // Clock out //Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); float p = 3.1415926; void setup(void) { Serial.begin(9600); Serial.print(F("Hello! ST77xx TFT Test")); // Use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT: tft.init(240, 320); // Init ST7789 240x240 // OR use this initializer (uncomment) if using a 1.69" 280x240 TFT: //tft.init(240, 280); // Init ST7789 280x240 // OR use this initializer (uncomment) if using a 2.0" 320x240 TFT: //tft.init(240, 320); // Init ST7789 320x240 // OR use this initializer (uncomment) if using a 1.14" 240x135 TFT: //tft.init(135, 240); // Init ST7789 240x135 // OR use this initializer (uncomment) if using a 1.47" 172x320 TFT: //tft.init(172, 320); // Init ST7789 172x320 // OR use this initializer (uncomment) if using a 1.9" 170x320 TFT: //tft.init(170, 320); // Init ST7789 170x320 // SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here // Note that speed allowable depends on chip and quality of wiring, if you go too fast, you // may end up with a black screen some times, or all the time. //tft.setSPISpeed(40000000); Serial.println(F("Initialized")); uint16_t time = millis(); tft.fillScreen(ST77XX_BLACK); time = millis() - time; Serial.println(time, DEC); delay(500); // large block of text tft.fillScreen(ST77XX_BLACK); testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE); delay(1000); // tft print function! tftPrintTest(); delay(4000); // a single pixel tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN); delay(500); // line draw test testlines(ST77XX_YELLOW); delay(500); // optimized lines testfastlines(ST77XX_RED, ST77XX_BLUE); delay(500); testdrawrects(ST77XX_GREEN); delay(500); testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA); delay(500); tft.fillScreen(ST77XX_BLACK); testfillcircles(10, ST77XX_BLUE); testdrawcircles(10, ST77XX_WHITE); delay(500); testroundrects(); delay(500); testtriangles(); delay(500); mediabuttons(); delay(500); Serial.println("done"); delay(1000); } void loop() { tft.invertDisplay(true); delay(500); tft.invertDisplay(false); delay(500); } void testlines(uint16_t color) { tft.fillScreen(ST77XX_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(0, 0, x, tft.height()-1, color); delay(0); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(0, 0, tft.width()-1, y, color); delay(0); } tft.fillScreen(ST77XX_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); delay(0); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(tft.width()-1, 0, 0, y, color); delay(0); } tft.fillScreen(ST77XX_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(0, tft.height()-1, x, 0, color); delay(0); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); delay(0); } tft.fillScreen(ST77XX_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); delay(0); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); delay(0); } } void testdrawtext(char *text, uint16_t color) { tft.setCursor(0, 0); tft.setTextColor(color); tft.setTextWrap(true); tft.print(text); } void testfastlines(uint16_t color1, uint16_t color2) { tft.fillScreen(ST77XX_BLACK); for (int16_t y=0; y < tft.height(); y+=5) { tft.drawFastHLine(0, y, tft.width(), color1); } for (int16_t x=0; x < tft.width(); x+=5) { tft.drawFastVLine(x, 0, tft.height(), color2); } } void testdrawrects(uint16_t color) { tft.fillScreen(ST77XX_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); } } void testfillrects(uint16_t color1, uint16_t color2) { tft.fillScreen(ST77XX_BLACK); for (int16_t x=tft.width()-1; x > 6; x-=6) { tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); } } void testfillcircles(uint8_t radius, uint16_t color) { for (int16_t x=radius; x < tft.width(); x+=radius*2) { for (int16_t y=radius; y < tft.height(); y+=radius*2) { tft.fillCircle(x, y, radius, color); } } } void testdrawcircles(uint8_t radius, uint16_t color) { for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { tft.drawCircle(x, y, radius, color); } } } void testtriangles() { tft.fillScreen(ST77XX_BLACK); uint16_t color = 0xF800; int t; int w = tft.width()/2; int x = tft.height()-1; int y = 0; int z = tft.width(); for(t = 0 ; t <= 15; t++) { tft.drawTriangle(w, y, y, x, z, x, color); x-=4; y+=4; z-=4; color+=100; } } void testroundrects() { tft.fillScreen(ST77XX_BLACK); uint16_t color = 100; int i; int t; for(t = 0 ; t <= 4; t+=1) { int x = 0; int y = 0; int w = tft.width()-2; int h = tft.height()-2; for(i = 0 ; i <= 16; i+=1) { tft.drawRoundRect(x, y, w, h, 5, color); x+=2; y+=3; w-=4; h-=6; color+=1100; } color+=100; } } void tftPrintTest() { tft.setTextWrap(false); tft.fillScreen(ST77XX_BLACK); tft.setCursor(0, 30); tft.setTextColor(ST77XX_RED); tft.setTextSize(1); tft.println("EEWORLD "); tft.setTextColor(ST77XX_YELLOW); tft.setTextSize(2); tft.println("EEWORLD"); tft.setTextColor(ST77XX_GREEN); tft.setTextSize(3); tft.println("EEWORLD "); tft.setTextColor(ST77XX_BLUE); tft.setTextSize(4); tft.print(1234.567); delay(1500); tft.setCursor(0, 0); tft.fillScreen(ST77XX_BLACK); tft.setTextColor(ST77XX_WHITE); tft.setTextSize(0); tft.println("EEWORLD "); tft.setTextSize(1); tft.setTextColor(ST77XX_GREEN); tft.print(p, 6); tft.println(" Want pi?"); tft.println(" "); tft.print(8675309, HEX); // print 8,675,309 out in HEX! tft.println(" Print HEX!"); tft.println(" "); tft.setTextColor(ST77XX_WHITE); tft.println("Sketch has been"); tft.println("running for: "); tft.setTextColor(ST77XX_MAGENTA); tft.print(millis() / 1000); tft.setTextColor(ST77XX_WHITE); tft.print(" seconds."); } void mediabuttons() { // play tft.fillScreen(ST77XX_BLACK); tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE); tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED); delay(500); // pause tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE); tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN); tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN); delay(500); // play color tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE); delay(50); // pause color tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED); tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED); // play color tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN); }       总结:       对于驱动屏幕而言,最好是采用RTOS+GUI 进行事件调度;  

  • 发表了主题帖: 【Beetle ESP32 C6 Mini 】外设之 i2c 驱动HMC3588L

    从Beetle ESP32 C6 Mini  引脚分布可知, I2C 的外设包括一组I2C 和一组低功耗I2C, SPI 包括除了片选之外的一组SPI; 对于管脚如下:            SDA->GPIO19            SCL->GPIO20     手上有一款I2C 接口的HMC3588L 的模块; 实物图像如下:          HMC5883是霍尼韦尔公司生产的一款地磁场检测芯片是一款表面贴装的集成了信号处理电路的三轴磁性传感器,应用场景主要包括罗盘、导航、无人机、机器人和手持设备等一些高精度的场合。详细功能可以参考规格书; 硬件连接如下:     编写相关代码: #include <Arduino.h> #include <Wire.h> #include <SPI.h> #define HMC3588Address 0x1E void setup() { Serial.begin(115200); Wire.begin(); SPI.begin(7); //初始化SPI CS on GPIO7 Wire.beginTransmission(HMC3588Address); Wire.write(0x02); Wire.write(0x00); Wire.endTransmission(); } void loop() { int x,y,z; Wire.beginTransmission(HMC3588Address); Wire.write(0x03); Wire.endTransmission(); Wire.requestFrom(HMC3588Address, 6); if(6<=Wire.available()) { x = Wire.read()<<8; x |= Wire.read(); z = Wire.read()<<8; z |= Wire.read(); y = Wire.read()<<8; y |= Wire.read(); } Serial.print(" x: "); Serial.print(x); Serial.print(" y: "); Serial.print(y); Serial.print(" z: "); Serial.print(z); Serial.print("\r\n"); delay(200); } 测试输出相关数据:   总结:       是否需要低功耗I2C 取决于产品设计需求;

  • 2024-05-12
  • 发表了主题帖: 【Beetle ESP32 C6 Mini 】外设之 IO 与串口

        本期主要验证Beetle ESP32 C6 Mini  外设中 IO 与串口功能;     在如下原理图中:             IO 口比较典型:                         GPIO15 --> LED1, 高电平点亮                        GPIO09 -->  KEY, 低电平触发             UART 功能:                       TX --> GPIO16                       RX-->  GPIO17          连接Beetle ESP32 C6 Mini 与USB 转UART 功能;     设置软件代码如下: #include <Arduino.h> struct Button { const uint8_t PIN; uint32_t numberKeyPresses; bool pressed; }; Button button1 = {9, 0, false}; #define LED 15 uint8_t stateLED = 0; void ARDUINO_ISR_ATTR isr() { button1.numberKeyPresses += 1; button1.pressed = true; } void setup() { pinMode(LED, OUTPUT); pinMode(button1.PIN, INPUT_PULLUP); attachInterrupt(button1.PIN, isr, FALLING); Serial.begin(115200); } void loop() { if (button1.pressed) { Serial.printf("Button 1 has been pressed %lu times\n\r", button1.numberKeyPresses); button1.pressed = false; stateLED = stateLED^1; digitalWrite(LED,stateLED); } } 最终输出:   代码实现了 IO的输入输出, 中断, 串口的打印功能;   单独验证IO口从1到0 输出的时间; void setup() { pinMode(6, OUTPUT); } void loop() { digitalWrite(6,0); digitalWrite(6,1); } 此时输出波形; 高低电平的时间并不是一样长;     如果代码变成如下; void setup() { pinMode(6, OUTPUT); } void loop() { digitalWrite(6,1); digitalWrite(6,0); }     也就新一轮的loop 开始中间是有间隔的;这个和普通的main.c 函数有什么区别呢? 查阅原函数可以看见main.cpp 设计如下, 所有就会有以上区别;    

  • 发表了主题帖: 【Beetle ESP32 C6 Mini 】Arduino 开发环境搭建

              FireBeetle 2 ESP32 C6 Mini 采用的是乐鑫ESP32 C6 ,主要的开发环境有如下几种;                     ESP-IDF+VSCODE                     ESP-IDF+Platform IO                     Micropython 及其类似                     Arduino             以上四种方式都可以对ESP32-C6 进行软件开发和验证, 主要看自己的熟悉程度;           以下以Arduino 为IDE 的开发环境进行搭建; 主要是官方和第三方都有非常多库可以直接用;   一、安装Arduino 开发环境;                在Arduino 官方下载,选择V2.3 以上版本,否则无法支持到ESP32 C6 芯片;   二、安装ESP32-C6 的相关支持;              在开发板中选择ESP32 然后安装3.0 的版本;3.0 的版本才支持ESP32 C6, 更新会花费很长时间, 由于网络原因可能要很久; 可以在Windows 的Microsoft store 中安装Watt Tookit  工具,可以加速, 具体功能自行研究;              三、Arduino 的配置:         将Beetle ESP32 C6 Mini  Mini  通过TypeC 口与PC 相连;打开Arduino 后进行配置;         1、选择开发板类型和COM 口;    在文件-示例中可以看见相关例子;   在工具中有烧录的相关配置,一般默认就可以;     新建工程BeetleESP32C6 保存;      会出现:                BeetleESP32C6 和libraries 文件夹,前者放ino 的编程文件, 后者放库文件(IDE 自己安装的库或者第三方库都可以)   工程文件:            点击下载,即可以完成将生成的可执行文件下载到ESP32 C6;   我们可以发现Arduino  的工程目录下并没有生成可执行文件, 需要进行如下操作; 在工具-导出已经编译的二进制文件;   此时在工作目录下就有生成相应的可执行文件;可以采用乐鑫的官方工具进行烧录;                 还有就是如果按照官方的开发板支持包,可以在Arduino 中直接寻找,不用在网上胡乱搜索;在首选项->其他开发板管理;        

  • 发表了主题帖: 【Beetle ESP32 C6 Mini 】入手

    本帖最后由 DavidZH 于 2024-5-12 20:01 编辑 有幸获得EEWORLD 的FireBeetle 2 ESP32 C6 Mini 开发板, 和一个一元硬币的大小差不多,这么小的板子看看隐藏了多大的智慧;      一、板载资源了解;        正面可以看见一个RST 复位按键+一个BOOT 按键,采用TYPE-C 口方式; 反面则集成锂电池充电管理芯片TP4057 和LDO RT9080; 通过资料了解FireBeetle 2 ESP32 C6 Mini 是采用乐鑫的ESP32C6 20MHZ 的WIFI 6 ,且支持TWT 的低功耗,因此板载的预留BAT 接口,可以对WIFI 6 的低功耗特性进行测试; 外围的晶振配合电容组成了最小系统;     二、板载外设;           麻雀虽小,五脏俱全; FireBeetle 2 ESP32 C6 Mini  虽然体积小,但外设资源却不少; 如图所示可以看出ADC, UART, I2C, SPI, JTAG.SDIO 都有,虽然采用复用,对于单独进行验证芯片还是不错的选择;   按照如上的外设资源进行逐个验证;   三、 MCU 资源;      FireBeetle 2 ESP32 C6 Mini 的最大特点是采用ESP32 C6, WIFI6 的特性中有TWT 的低功耗,相对于WIFI 4或者WIFI5 在IOT 的应用中有天然优势; 另外该芯片支持多种协议,在后期进行Matter over wifi 或者Matter over Thread  也是不错的选择,但具体是否能有描述的这么第的功耗,需要进一步验证; 搭载ESP32-C6芯片,支持Wi-Fi、BLE、Zigbee、Thread通讯协议 支持Wi-Fi 6协议,更低延迟,更低功耗 超低功耗,deep-sleep 14uA 集成锂电池充电功能 支持电池电压检测,了解设备电量信息 主控ESP32 C6 支持的无线 特性如下: WIFI协议:IEEE 802.11b/g/n/ax IEEE 802.11ax (20 MHz-only non-AP mode) WIFI频宽: 2.4 GHz 频带支持 20 MHz 和 40 MHz 频宽 WIFI模式:Station 模式、SoftAP 模式、SoftAP+Station 模式和混杂模式 WIFI频率:2.4GHz 帧聚合: TX/RX A-MPDU, TX/RX A-MSDU 蓝牙 蓝牙协议:Bluetooth 5、Bluetooth mesh 蓝牙频率:125 Kbps、500 Kbps、1 Mbps、2 Mbps 目前依然是延续了乐鑫的产品,WiFi+蓝牙的SOC; 对于是否支持WiFi的WPA3 加密,以及相关应用协议的支持和蓝牙5 支持的应用有待探索;    

  • 2024-04-26
  • 回复了主题帖: 测评入围(第二波):Beetle ESP32 C6迷你开发板 基于ESP32-C6芯片

    个人信息无误,确认可以完成评测计划。

  • 2024-03-03
  • 发表了主题帖: 【100+板卡来袭,有缘来领活动】DFROBOT dri0039_ESP32_OpenMV

          一、初步想法:     有幸申请到了EEWORLD 赠送的DFRobot Arduino四路电机驱动板,按照年前的计划逐步开始玩起来;按照最初申请的计划是做小车,主要目的是实现无线控制,摄像头识别等功能,后续可以借鉴其他大神的开源项目逐步增加其他相关功能; 初步框图如下:       二、硬件选择:        按照如上图所示手搓或者直接购买相应的模块;         1、DFRobot Arduino  dri0039 为Arduino 接口的四轮直流马达驱动板子;如下图所示;           2、主控部分带无线的Arduino 控制板子,ESP32 Arduino  最为合适,经过寻找ESP32 UNO D1R32 最合适,也可以考虑嘉立创的ESP32S3 Arduino 开源板进行手搓;   ESP32 UNO D1R32: GitHub - espressif/arduino-esp32: Arduino core for the ESP32 ES32S3 Arduino:ESP32S3_UNO - 嘉立创EDA开源硬件平台 (oshwhub.com)           3、 OpenMV 部分既可以实现摄像头功能也可以实现人脸识别等功能,比较合适; 参考嘉立创开源项目手搓,选择基于STM32H750 的OpenMV,性价比和后期扩展为主; openmv4_h750: https://oshwhub.com/remige/openmv4h750         4、电机和车轮选择:             ->DFRobot Arduino  dri0039 驱动的是直流电机,不考虑升降压需求,直接选5V 驱动直流电机;            ->车轮则选择麦克纳姆轮, 可以实现任意方向的前进;           直接在 淘宝寻找合适的成品即可;            5、供电部分: 供电主要有2个部分一个给主控ESP32 供电,另外就是需要给电机供电; 刚好手上有2个 A口输出的充电宝都是5V 1A,正好给整个电路供电;   三、组装:      集齐以上装备之后开始组装,前期主要是做小车四轮驱动的控制部分,OpenMV 再逐步增加上去; 最终成品如下,欢迎大家仍板砖;         至此小车的主体架构基本完成,后续慢慢增加相应的其他功能;    

  • 2024-02-27
  • 回复了主题帖: 大家有没有兴趣一起DIY一个USB充电器

    这个是Ac-Dc的,不如改成电池方式,最高支持120W输出,手机电脑都可以充了

  • 2024-02-20
  • 回复了主题帖: 【RTT&英飞凌PSoC6评估板(带触摸)】+ ModusToolbox离线方式开发环境搭建

    modustoolbox v3.1也支持离线包方式,使用LCS即可; 

  • 2024-01-19
  • 回复了主题帖: 【自制DA14531手环(仿小米手环4/5)开发套件】配套教程 之 一:开发环境 + 入门..

     大佬厉害, 受益匪浅

  • 2024-01-18
  • 回复了主题帖: 领取审核名单(第五批): 辞旧,年底清仓,100+板卡来袭,有缘来领

    个人信息无误,已知晓需自己支付邮费

  • 2024-01-09
  • 回复了主题帖: 辞旧:年底清仓,100+板卡来袭,有缘来领

    DavidZH 发表于 2024-1-9 15:49 我申请43号板子DFRobot Arduino四路电机驱动板领取理由:本来计划是设计四轮的ROS系统,也看见有开源的 ... 主控计划用ESP32s3,支持Arduion和micropython,采用手机App控制,esp32的cam实现openmv的视频识别功能

  • 回复了主题帖: 辞旧:年底清仓,100+板卡来袭,有缘来领

    我申请43号板子DFRobot Arduino四路电机驱动板领取理由:本来计划是设计四轮的ROS系统,也看见有开源的DFRobot Arduino四路电机驱动板,这个是2024年的计划,搞出来然后就可以共同学习了

统计信息

已有147人来访过

  • 芯积分:185
  • 好友:1
  • 主题:72
  • 回复:1630

留言

你需要登录后才可以留言 登录 | 注册


DavidZH 2018-3-13
建议按照完整版,
zhengbang 2018-3-6
您好,我在配置Visual Studio :时,工具栏里没有Embeded Tools Manager,
请问这是什么情况,百度也没找到,文档也没找到。
升级VS2017也没有Embeded Tools Manager选项。  请问能帮忙吗  谢谢
查看全部