Dự án đẹp. Dưới đây là một vài gợi ý, tuy nhiên sẽ rất khó để khái quát hóa điều này cho mọi dự án.
Bắt đầu với các yêu cầu tính toán
Đây là những gì sẽ cho bạn biết loại cốt lõi bạn cần và các màn trình diễn chung của MCU. Tôi khuyên bạn nên bắt đầu với điều này, vì rõ ràng nó không thể được mở rộng bằng cách sử dụng các thành phần bên ngoài, không giống như các thiết bị ngoại vi.
Đầu tiên, có vẻ như bạn sử dụng các phép toán nặng với các số nguyên lớn trong vòng lặp. Vì vậy, như bạn đã đề xuất, 32 bit sẽ hữu ích ở đây, do đó ARM là một ứng cử viên lý tưởng. Đối với tần suất hoạt động: hiện tại, bạn đang sử dụng Arduino MEGA2560 (chạy ở tốc độ 16 MHz, tôi giả sử) và bạn có thể thực hiện 10 vòng / s. Nếu bạn muốn đạt được 100 vòng / giây, bạn sẽ ổn với Cortex-M3 / M4 trong phạm vi 100 MHz trở lên (ước tính sơ bộ). Lưu ý rằng Cortex-M4F có đơn vị điểm nổi.
Chúng tôi đã thu hẹp lựa chọn.
Yêu cầu bộ nhớ
Điều này thật dễ dàng: chọn MCU có nhiều RAM / Flash nhất trong phạm vi của nó cho nguyên mẫu. Khi bạn xác thực nguyên mẫu, hãy chuyển sang MCU từ cùng phạm vi có đủ RAM / Flash, bây giờ bạn đã biết các yêu cầu chính xác của mình.
Lưu ý rằng tôi không nghĩ rằng ứng dụng của bạn cần số lượng bộ nhớ đáng kinh ngạc.
Bây giờ, các thiết bị ngoại vi
Bạn hoàn toàn cần một số ADC. Tất cả các MCU của phạm vi chúng tôi đang xem có một số, vì vậy đó không phải là một tiêu chí hữu ích. Không phải là đầu vào / đầu ra kỹ thuật số, ngoại trừ nếu bạn cần một số lượng rất lớn trong số họ (dường như không phải là trường hợp của bạn).
Bạn dường như cần một bộ xử lý. Tuy nhiên, đây là thứ bạn thực sự sẽ không dễ dàng tìm thấy và sẽ thu hẹp các ứng cử viên quá nhiều. Vì vậy, chúng tôi không giữ yêu cầu đó và chúng tôi sẽ ở lại với một PWM và đường thông thấp (thực sự có thể chấp nhận được).
Bạn không đề cập đến bất kỳ giao diện giao tiếp nào, ngoại trừ LCD (sau này). Dù sao, tất cả các MCU đều có I2C / SPI / UART / ... nếu bạn cần.
Màn hình LCD
Đây là một trong những khó khăn hơn, bởi vì có rất nhiều giải pháp khác nhau đặt ra các yêu cầu hoàn toàn khác nhau về MCU. Nhưng đừng chọn LCD tùy thuộc vào MCU. Chọn màn hình LCD bạn muốn cho sản phẩm của mình và sau đó chọn MCU sẽ điều khiển nó hiệu quả.
- Nếu bạn muốn có màn hình LCD ký tự: thì MCU dễ nhất và ít ràng buộc nhất là nói chuyện với nó thông qua một số giao diện nối tiếp (thường là SPI). Bằng cách này, nó sẽ không sử dụng quá nhiều mã PIN, bạn có thể sử dụng MCU nhỏ hơn / rẻ hơn và tốc độ không phải là vấn đề.
- Nếu bạn muốn có màn hình LCD LCD đồ họa: nếu là màn hình nhỏ, liên kết nối tiếp vẫn có thể phù hợp. Tuy nhiên, đối với 320x200 hoặc lớn hơn và nếu bạn muốn có một giao diện đồ họa đẹp, bạn sẽ bắt đầu muốn giao tiếp với giao diện song song. Trong trường hợp này, bạn sử dụng một số GPIO (nhưng điều đó sẽ gây thêm tải cho MCU vì bạn sẽ phải đập các dòng điều khiển) hoặc bạn chọn MCU có giao diện LCD chuyên dụng (thường giống với giao diện bộ nhớ ngoài). Điều cuối cùng này đặt ra một ràng buộc mạnh mẽ đối với lựa chọn MCU, nhưng bạn không có những ràng buộc mạnh mẽ khác, vì vậy ...
Bây giờ, bạn chọn
Truy cập trang web ST Micro / NXP / Atmel và sử dụng các công cụ lựa chọn MCU của họ. Bạn cũng sẽ dành nhiều thời gian để đọc datasheets. Hãy dành thời gian này. Nó không lãng phí. Bất cứ điều gì bạn sẽ học ở đây, ngay cả khi bạn không sử dụng nó cụ thể cho dự án này, đều có thể hữu ích.
Tại thời điểm này, bạn cũng cần xem số lượng mã PIN bạn thực sự cần và kiểm tra sơ đồ ghép kênh của các ứng cử viên MCU đã chọn để xác minh bạn có thể sử dụng tất cả các chức năng mã PIN bạn cần. Bởi vì rõ ràng, bạn sẽ muốn lấy MCU với số lượng chân thấp nhất đáp ứng yêu cầu của bạn (vì lý do chi phí / PCB bất động sản).
Kiểm tra giá / phòng trống trên Mouser / Digikey. Nhưng bạn không cần một cái gì đó đặc biệt đắt tiền ở đây. Có thể 5 € hoặc hơn.
Điều cuối cùng liên quan đến điều khiển LCD
Có vẻ như bản cập nhật của LCD là một phần của vòng lặp chính của bạn. Nó không nên. Đặc biệt nếu bạn lặp 100 lần một giây, điều đó là vô ích. Tạo vòng điều khiển tính toán mọi thứ và điều chỉnh lệnh động cơ trên mỗi lần lặp, nhưng chỉ cần cập nhật các giá trị để hiển thị ở đâu đó trong bộ nhớ. Sau đó, có một vòng lặp khác có mức độ ưu tiên thấp hơn hiển thị thông tin này cho người dùng khi không có gì quan trọng hơn để làm.
Vâng, lý tưởng, nó đòi hỏi một số chuyển đổi nhiệm vụ và công cụ. Một hệ điều hành thực sự, thực sự (tra cứu FreeRTOS, Coocox OS, Nuttx, ... những thứ rất nhỏ, phần lớn được sử dụng trên Cortex-M và cung cấp các cơ chế đa nhiệm cần thiết).